对于我的项目,我使用cookie自动登录用户。但是,我不希望用户知道哪些cookie用于什么目的。
出于这个原因,我决定加密cookie的名称以及内容。解密这些cookie的内容以供使用不会造成太大麻烦。它完全按照我的要求运作。但是,为了兼容性和动态性,我试图通过名称动态调用cookie,使用类似的代码:
if(isset($_COOKIE[$encryption->decrypt('username')]){ ... }
但这似乎不起作用。也没有使用cookie的加密名称设置变量,如下所示:
$cookie_name = $encryption->decrypt('username');
if(isset($_COOKIE[$cookie_name]){ ... }
我目前使用这个脚本的方式(有效,但似乎有点草率)是这样的:
if(isset($_COOKIE['Nm9yNCtoK1lTY2M5TnhKWnRvL0NjUT09']){ ... }
有没有办法正确地执行此操作,或者我是否被强制通过预先加密的名称来调用cookie,就像我目前所做的那样?
答案 0 :(得分:2)
您永远不想使用Cookie来存储用户数据,而是使用$ _SESSION并使更长时间的用户使用此代码:
session_set_cookie_params ((14 * 24 * 60 * 60), '/', '.yoursite.com');
//Set the session for 14 days, on all paths, on all subdomains of yoursite.com
这将比浏览器关闭时间更长,并在下次打开时继续会话。
例如,在login.php,您可以拥有:
if ($remembermechecked) {
session_set_cookie_params ((14 * 24 * 60 * 60), '/', '.yoursite.com');}
当$ remembermechecked为true时,会话将持续14天。
答案 1 :(得分:1)
如上面的评论中所述,使用会话是明智的。
在PHP中,会话可以是“持久的”...... AKA:当用户关闭浏览器时不要迷路。
检查这个答案。
https://stackoverflow.com/a/9797962/1521230
编辑:
要在每个请求上“重置”会话cookie持续时间,在每个页面上的session_start()之后,您还需要使用session_regenerate_id(TRUE)。