我正在尝试使用“记住我”功能实现登录系统。 这是我的登录页面: http//pastebin.com/q6iK0Mgy 在此我尝试使用session_set_cookie_params()扩展会话cookie(PHPSESSIONID)到期。 但它不起作用。

代码中的相关部分:在此处执行内部if()循环,但session_set_cookie_params('3600')无效。 我正在调用session_name(),因为它应该是session_set_cookie_params()的一个要求(根据php手册中的一条评论)

if ( isset($_POST["submit"]) ) 
 {
     session_name() ;
     echo "calling before checked " ;
     if ( $_POST["remember"] == "on") 
    {
       // extend expiration date of cookie
       session_set_cookie_params('3600');
       echo "<br/>calling after sessions_set_cookie_params" ;
    }
 } 
 require_once("includes/session.php"); //session start ?>

我希望我能够解释我想做什么。 基本上我试图做的是延长session_cookie的到期时间。 我完全错了吗? 还有另一种方法可以达到同样的目的吗?

谢谢

#1楼 票数:6

从来没有太老的答案权利?

所以,PHP是愚蠢的 如同,它不会做你认为有意义的事情。

session_set_cookie_param在您调用session_start的确切时刻之前不会执行任何操作。 因此,如果您在调用会话开始后设置cookie参数,则为时已晚。 如果您设置cookie参数但不调用session_start,则不会发生任何事情。

session_start也是一个有趣的野兽。 它只会在第一次调用cookie时读取cookie数据,除非....你强制它写入,或者没有cookie开始。 因此,如果没有cookie,它会写入cookie数据,客户端会保存您的会话。 好极了! 但是当cookie已经存在时,我们如何强制它写入,从而更新我们新的到期日?

因此,如果客户端上已存在cookie,则忽略所有session_set_cookie_param调用会产生这种奇怪的效果。 更好的是,如果你明确地调用setcookie(session_name(), blah blah blah ),php将会STILL不发出cookie。

所以,让我们强制php发出一个cookie。

选项1

这可以通过调用session_id来实现唯一不会破坏现有会话的值。 http://php.net/session_id上的文档说明了这一点

注意:使用会话cookie时,指定session_id()的id将始终在调用session_start()时发送新cookie,无论当前会话ID是否与正在设置的会话ID相同。

session_id($_COOKIE[session_name()]);

所以无论如何早上6点,我还没有睡觉,如果不是几年前你可能想出这几个月,但是到底怎么样,也许我会在我生命的2或3个小时内拯救别人,我永远不会回来。 哈哈。

#2楼 票数:2

从文档:

您需要在调用session_start() 之前为每个请求调用session_set_cookie_params()。

另请查看http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime

  ask by gyaani_guy translate from so

未解决问题?本站智能推荐:

1回复

为什么使用session_set_cookie_params代替set_cookie?

这两个功能非常相似。 为什么有人会选择使用另一个?
1回复

会话无法在Google Chrome中使用session_set_cookie_params

我的提供商为我的网站提供了一个新的服务器,从那以后我一直遇到登录系统的问题,更确切地说, SESSION不正常(在localhost上我没有任何问题)。 起初,它在IE中不起作用。 所以我想通过stackoverflow上的其他输入我需要添加以下代码: 这在php.ini中设置为
1回复

session_set_cookie_params($ lifetime)有什么作用?

我很难理解PHP中的会话概念。 我已经阅读了我所关注的文字和在线上的多个教程。 到目前为止,我对会话的理解是: 会话持续到关闭浏览器或在浏览器上设置超时为止。 启动会话时,PHP将检查传入的会话ID(客户端上的cookie),然后可以获取/设置会话变量,该变量存储在服务器上该会话ID
1回复

session_set_cookie_params安全吗?

我们目前正在使用一种自定义登录系统,该系统在一个站点上的数据库中设置哈希值,然后当用户在域和子域之间转移时,将它们登录。它并不总是登录用户,因此他们单击登录链接/按钮,它将带他们进入登录,如果他们有一个会话,它将加载它,否则将显示登录页面。 我们想摆脱它,并使用更好的东西。 使用php有
1回复

子域的session_set_cookie_params

这可能有点令人困惑,所以请在我解释该问题时耐心等待一下。 我有一个网站www.mydomain.com和一个移动版本m.mydomain.com主网站没有任何特定的cookie_params设置移动网站专门设置了 移动设备将被自动检测并定向到移动站点。 移动站点使用https
6回复

setcookie() 和 session_set_cookie_params() 函数的区别

我试图了解 PHP 函数 setcookie() 和 session_set_cookie_params() 之间的区别。 看起来这两个函数都在执行相同类型的任务,但 setcookie() 可用于创建具有名称和值的 cookie。 我试图理解 PHP 手册,但没有指出其中的明显差异。 谢谢
1回复

session_set_cookie_params中的“secure”参数

我有兴趣了解更多关于函数session_set_cookie_params()的安全参数。 你能告诉我如何正确使用它吗? 如果在不安全的页面上执行此功能(但在具有SSL的服务器上),它是否会以某种方式安全地发送它,或者我是否必须在页面上强制使用此功能从我自己执行?
1回复

session_set_cookie_params(0)在Google Chrome中不起作用

我添加此代码以关闭浏览器销毁会话。 这段代码可以在Mozilla,Opera上正常运行,但不能在Chrome中运行。 我还在php.ini文件中设置了session.cookie_lifetime = 0 。