1

对于我的项目,我使用 cookie 来自动登录用户。但是,我不希望用户知道哪些 cookie 用于什么目的。

出于这个原因,我决定加密 cookie 的名称以及内容。解密这些cookies的内容以供使用不会造成太大的麻烦。它可以按我的意愿完美运行。但是,为了兼容性和动态性,我尝试通过它们的名称动态调用 cookie,使用类似的代码如下:

if(isset($_COOKIE[$encryption->decrypt('username')]){ ... }

但这似乎不起作用。也没有使用 cookie 的加密名称设置变量,如下所示:

$cookie_name = $encryption->decrypt('username');
if(isset($_COOKIE[$cookie_name]){ ... }

我目前使用这个脚本的方式(有效,但似乎有点草率)是这样的:

if(isset($_COOKIE['Nm9yNCtoK1lTY2M5TnhKWnRvL0NjUT09']){ ... }

有没有办法正确地做到这一点,或者我是否像现在一样被迫通过它的预加密名称调用 cookie?

4

2 回答 2

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 为真时,会话将持续 14 天。

于 2013-02-28T05:17:47.873 回答
1

如上面的评论所述,使用会话是明智的。

在 PHP 中,可以将会话设置为“持久的”... AKA:当用户关闭浏览器时不要迷路。

检查这个答案。

https://stackoverflow.com/a/9797962/1521230

编辑:

要在每个请求上“重置”会话 cookie 持续时间,在每个页面上的 session_start() 之后,您还需要使用 session_regenerate_id(TRUE)。

于 2013-02-28T05:12:16.867 回答