5

我使用 Finder 模块和 Views 模块创建了一个客户端网站搜索。问题是我的客户希望每次用户选择和搜索某个区域的企业时,都应该将其作为会话或 cookie 存储在访问者的计算机上。这将确保重复访问者看到他之前所做的相同搜索。请查看网站: http: //naplesres.designbracket.com/

此外,我还想知道是否可以根据之前的搜索配置视图,使其仅在他当地的业务中通过网站上使用的其余视图,即在汽车、美容等页面上.

任何以文档链接形式提供的帮助、有关如何进行操作的指针将不胜感激。

谢谢

4

3 回答 3

10

如果您需要跟踪某事并且它需要与未登录的用户一起工作,那么您要做的是使用 cookie 来跟踪它。您不能使用会话在 Drupal 中为匿名访问者存储内容,因为它与用户对象相关联。

这里有一个描述 - http://www.w3schools.com/PHP/php_cookies.asp - 但让我进入它。

您开始使用 setcookie(name, value, expire) - 我们假设我们想要调用这个值 business_search,我们将使用一个测试值“80204”,它是一个邮政编码 - 这同样适用如果您使用“科罗拉多州丹佛市”。我们不希望它过期六个月,所以我们想打电话给:

setcookie('business_search', '80204', time() + 3600 * 24 * 180);

那个时间相当于现在时间增加了大约六个月的秒数。

之后获取 cookie 更加容易 - 只需使用 $_COOKIE['business_search'],它就会返回值。因此,我们可以使用以下代码:

<?php
function saveSerch($search_term) {
  setcookie('business_search', $search_term, time() + 3600 * 24 * 180);
}

function readSearch() {
  return $_COOKIE['business_search'];
}
?>
于 2009-08-25T01:45:28.757 回答
3

当然可以,但这不是 Drupal 的正常做法。您通常所做的是将信息存储在会话中(使用sess_write/ sess_read),或者如果用户已登录,则存储在用户帐户信息中。

将信息保存在 cookie 中意味着它可以在客户端被篡改,并且您需要使您的代码更加万无一失,就像任何用户来源的数据一样。

如果您将其保留在会话中,它将在会话存在期间一直保留,但此后会消失。对于匿名用户来说,真的没有更好的办法了。OTOH,对于已登录的用户,将信息存储在$user->data意味着只要您不删除它们就可以使用它们,因为它们将存储在users表中。

还要记住drupal session cookie在从匿名切换到登录的时候会重新生成,但是会保留session的内容,这样你就可以把数据放到匿名session中,在用户登录的时候还有,然后存到他的账号数据里. 查看includes/session.inc有关其工作原理的详细信息。

于 2009-08-23T07:32:31.237 回答
3

如果您无法让客户端 cookie 粘贴在 Drupal 中,请尝试使用路径的可选参数。

例子:

setcookie('myCookieName', 'myCookieData', 0, '/');

然后,在下一页加载将您的 cookie 输出到屏幕上。您应该在输出中看到您的 cookie。

print_r($_COOKIE);

- 或者更具体地说 -

print $_COOKIE['myCookieName'];

干杯!

于 2010-06-03T17:47:18.073 回答