我已经使用Finder模块和Views模块创建了一个客户端网站的搜索。问题是我的客户希望每次用户选择并搜索特定区域中的商家时,应将其作为会话或cookie存储在访问者的计算机上。这将确保重复访问者看到他之前所做的相同搜索。 请查看网站:http://naplesres.designbracket.com/
此外,我还想知道如果基于之前的搜索,我可以配置视图,只在他的本地区域的业务传递在网站上使用的其余视图,即在汽车,美容等页面。
任何有关文档链接形式的帮助,以及如何处理它的指示都将深表感谢。
由于
答案 0 :(得分:10)
如果您需要跟踪某些内容,并且需要与未登录的用户合作,您要做的就是使用Cookie来跟踪它。您无法使用会话为Drupal中的匿名访问者存储内容,因为它与用户对象相关联。
这里有一个描述 - http://www.w3schools.com/PHP/php_cookies.asp - 但让我进入它。
你开始使用setcookie(name,value,expire) - 我们假设我们想要调用这个值business_search,我们将使用测试值'80204',这是一个邮政编码 - 这是有效的如果你使用'Denver,CO'就好了。我们不希望它过期六个月,所以我们想打电话:
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'];
}
?>
答案 1 :(得分:3)
当然可以做到,但这不是正常的Drupal方式。您通常所做的是将信息存储在会话中(使用sess_write
/ sess_read
),或者,如果用户已登录,则存储在用户帐户信息中。
在cookie中保存信息意味着它可以在客户端被篡改,并且您需要使您的代码更加万无一失,就像任何用户发起的数据一样。
如果您将其保留在会话中,则会在会话生效期间保留,但此后会消失。对于匿名用户,实际上没有更好的方法。 OTOH,对于已登录的用户,将信息存储在$user->data
中意味着只要您不删除它们就可以使用它们,因为它们将存储在users
表中。
还要记住,在从匿名切换到登录时会重新生成drupal会话cookie,但保留会话内容,这样您就可以将数据放入匿名会话中,并在用户登录时仍然拥有它,然后将其存储在他的帐户数据。请查看includes/session.inc
,了解其工作原理的详细信息。
答案 2 :(得分:3)
如果您在将客户端cookie粘贴在Drupal中时遇到问题,请尝试使用路径的可选参数。
示例:
setcookie('myCookieName', 'myCookieData', 0, '/');
然后,在下一页上,将cookie输出到屏幕上。你应该在输出中看到你的cookie。
print_r($_COOKIE);
- 或更具体地说 -
print $_COOKIE['myCookieName'];
干杯!