Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以使用动态cookie名称?_Php_Dynamic_Cookies - Fatal编程技术网

Php 是否可以使用动态cookie名称?

Php 是否可以使用动态cookie名称?,php,dynamic,cookies,Php,Dynamic,Cookies,对于我的项目,我使用cookies自动登录用户。但是,我不想让用户知道哪些cookie用于什么目的 出于这个原因,我决定加密cookies的名称以及内容。解密这些cookie的内容以供使用不会带来太多麻烦。我希望它能正常工作。但是,出于兼容性和动态性的考虑,我尝试使用类似的代码按cookie的名称动态调用cookie,如下所示: if(isset($_COOKIE[$encryption->decrypt('username')]){ ... } $cookie_name = $encr

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

出于这个原因,我决定加密cookies的名称以及内容。解密这些cookie的内容以供使用不会带来太多麻烦。我希望它能正常工作。但是,出于兼容性和动态性的考虑,我尝试使用类似的代码按cookie的名称动态调用cookie,如下所示:

if(isset($_COOKIE[$encryption->decrypt('username')]){ ... }
$cookie_name = $encryption->decrypt('username');
if(isset($_COOKIE[$cookie_name]){ ... }
if(isset($_COOKIE['Nm9yNCtoK1lTY2M5TnhKWnRvL0NjUT09']){ ... }
但这似乎不起作用。也没有使用cookie的加密名称设置变量,如下所示:

if(isset($_COOKIE[$encryption->decrypt('username')]){ ... }
$cookie_name = $encryption->decrypt('username');
if(isset($_COOKIE[$cookie_name]){ ... }
if(isset($_COOKIE['Nm9yNCtoK1lTY2M5TnhKWnRvL0NjUT09']){ ... }
我目前使用此脚本的方式(虽然有效,但似乎有点草率)如下所示:

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

有没有一种方法可以正确地执行此操作,或者我是否被迫像目前一样使用cookie的预加密名称来调用cookie?

如上所述,使用会话是明智的

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

检查这个答案

编辑:


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

您永远不想使用cookie存储用户数据,而是要使用$\u会话,并使其持续时间更长。此代码:

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天。

不要在cookie中存储任何登录信息。使用
$\u SESSION
存储登录数据(SESSION将反过来使用cookies来标识会话,但这与包含用户名的加密版本非常不同)。无法使用
$\u SESSION
进行自动登录。为此,我实际上需要cookies。你所说的“自动登录”是什么意思?我的意思是像许多网站一样的功能,询问用户是否希望“记住”,如果是这样,他们每次访问时都会自动登录,即使会话已结束,在这种情况下,网站将创建一个新会话。drew010在他的回答中说:“cookie生存期是从会话首次启动时开始设置的,而不是在后续请求中设置的。”,这难道不意味着会话启动后,会话的生存期为7天,用户仍需重新登录网站,即使在会话的生命周期内访问过该网站,它也会说“如果要将会话的生命周期从当前时间延长7天,请参阅会话_regenate_id()”。我补充了我的答案。我不介意你给他最好的答案,你赢了一些,输了一些。除此之外,我更希望@AndrewMcGivery包含直接代码来支持他的答案,因为堆栈溢出不认为仅链接的答案是可接受的。但这是否意味着我必须“伪造”用户登录以防止会话超时,因为会话的cookie不会以这种方式在后续请求中扩展其生存期?不,实际上,现在你正在使用cookies假装用户登录$_会话是跟踪用户登录的正确方法。基本上,$\u会话['userid']将是登录用户的id。注销时,您几乎只是将会话丢弃,然后他们就注销了。好的,谢谢您的澄清。我希望你不介意,但既然你和安德鲁给出了大致相同的答案,而且你的声誉更高,我将接受安德鲁的正确答案。