Php 正确使用session\u set\u cookie\u参数

Php 正确使用session\u set\u cookie\u参数,php,Php,我正在尝试实现一个带有“记住我”功能的登录系统。这是我的登录页面:。在本文中,我尝试使用session_set_cookie_params()扩展会话cookie(PHPSESSIONID)过期。但它不起作用 代码的相关部分:在这段代码中,内部if()循环正在执行,但会话\u set\u cookie\u params('3600')没有效果。我正在调用session_name(),因为它应该是session_set_cookie_params()的一个要求(根据php手册上的一条注释) if(

我正在尝试实现一个带有“记住我”功能的登录系统。这是我的登录页面:。在本文中,我尝试使用session_set_cookie_params()扩展会话cookie(PHPSESSIONID)过期。但它不起作用

代码的相关部分:在这段代码中,内部if()循环正在执行,但会话\u set\u cookie\u params('3600')没有效果。我正在调用session_name(),因为它应该是session_set_cookie_params()的一个要求(根据php手册上的一条注释)

if(设置($\u POST[“提交”]))
{
会话名称();
回显“检查前呼叫”;
如果($_POST[“记住”]=“打开”)
{
//延长cookie的有效期
会话设置cookie参数('3600');
echo“
会话后调用\u设置\u cookie \u参数”; } } 需要一次(“includes/session.php”)//会话开始?>
我希望我能解释我想做什么。基本上,我想做的是延长会话cookie的过期时间。我的做法完全错了吗?有没有其他方法可以达到同样的效果


感谢文档中的:

你需要打电话 每个会话的会话设置cookie参数() 请求并在会话开始()之前执行 打电话来


另外,请检查“永远不要太老”以获得答案,对吗

因此,PHP是愚蠢的。就像在,它不会做你认为有意义的事情

session\u set\u cookie\u参数在您调用session\u start的确切时刻之前不会执行任何操作。因此,如果在调用会话开始后设置cookie参数,就太晚了。如果设置cookie参数,但不调用session_start,则不会发生任何事情

session_start也是一个有趣的野兽。它只在第一次调用cookie数据时读取数据-除非。。。。您强制它写入,否则就没有cookie可供使用。因此,如果没有cookie,它将写入cookie数据,客户端将保存您的会话。耶!但是,当cookie已经存在时,我们如何强制它写入,从而更新新的到期日期

因此,如果客户端上已经存在cookie,我们会忽略所有会话_set _cookie _param调用。更好的是,如果显式调用setcookie(session_name(),诸如此类),php仍然不会发出cookie

因此,让我们强制php发出cookie

选择1 这通过使用唯一不会破坏现有会话的值调用会话_id来实现。在下列国家的文件:

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


不管怎么说,现在已经是早上6点了,我还没睡过觉,你可能几个月前就知道了,如果不是几年前的话,但是见鬼,也许我会救别人一辈子的两三个小时,我再也回不来了。哈哈。

为什么不使用set_cookie('name','value',3600)?我认为我需要使用会话来实现登录系统,因此需要扩展会话cookie。我错了吗?你只在你的电脑上测试过吗?因为一个真正的问题是在“localhost”上设置会话cookie不起作用,我认为这是由于HTTP协议的某些安全属性。例如,请参阅此示例,其中如果域不是本地主机,则将其设置为“.yourdomain”。如果它是localhost,则域被设置为“”(空字符串),然后它就可以工作了。我不知道这是否是您问题的解决方案,但如果您在localhost上测试,这是值得测试的。@Johan Awesome:-)您应该添加注释的扩展作为答案。干杯,也许吧。我只需要再理解一遍!;)那是一年多前我写的,我有点忘了这是怎么回事。我正在打电话给session_start。在session_start()之前调用session_set_cookie_params()是在includes/session.phpTry中的。一年多以后了,你的代码片段帮了我的忙!它正是我所需要的:在每次页面加载时延长cookie过期时间。我在
session_start()之前添加了它。谢谢来自未来!
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_id($_COOKIE[session_name()]);