微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 正确使用session_set_cookie_params

我正在尝试使用“记住我”功能实现登录系统.这是我的登录页面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的到期时间.我完全错了吗?还有另一种方法可以达到同样的目的吗?

谢谢

解决方法:

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

所以,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文件说明了这一点

Note: When using session cookies, specifying an id for session_id() will always send a new cookie when session_start() is called, regardless if the current session id is identical to the one being set.

session_id($_COOKIE[session_name()]);

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐