【问题标题】:Difference between setcookie() and session_set_cookie_params() functionssetcookie() 和 session_set_cookie_params() 函数之间的区别
【发布时间】:2017-07-12 03:29:32
【问题描述】:

我试图了解 PHP 函数 setcookie() 和 session_set_cookie_params() 之间的区别。

看起来这两个函数执行相同类型的任务,但 setcookie() 可用于创建具有名称和值的 cookie。

我试图理解 PHP 手册,但其中没有指出明显的差异。

谢谢

【问题讨论】:

    标签: php session cookies


    【解决方案1】:

    session_set_cookie_params(秒)

    session_start() 做了两件事,它在服务器上创建一个临时文件来存储会话数据,并且还向用户的浏览器发送一个 cookie。此 cookie 有一个默认过期时间,因此调用 session_set_cookie_params(seconds) 会将 cookie 的默认过期时间更改为您定义的。 cookie 基本上将客户端指向他们的会话,因此需要访问会话。

    设置 Cookie()

    其中 setcookie() 函数定义了要与其余 HTTP 标头一起发送的 cookie。

    【讨论】:

      【解决方案2】:

      有两种类型的 cookie:

      会话 cookie : 这些是 session_set_cookie_params(),它们是临时 cookie 文件,当您关闭浏览器时会被删除。

      持久性 cookie: 这是 setcookie(),这些文件保留在浏览器的子文件夹之一中,直到您手动删除它们或您的浏览器根据持久性 cookie 中包含的持续时间删除它们。

      例如,如果您希望将 cookie 保存 1 周:

      $remembering_timespan = time() + 7 * 24 * 60 * 60; 
      setcookie('test','username', $remembering_timespan);
      

      【讨论】:

        【解决方案3】:

        基本上不一样。

        对于setcookie

        <?php
        $value = 'something from somewhere';
        
        setcookie("TestCookie", $value);
        setcookie("TestCookie", $value, time()+3600);  /* expire in 1 hour */
        setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
        ?>
        

        您可以像上面那样设置超时会话的名称和值本身。 至于 session_set_cookie_params:

        session_set_cookie_params( 
            $currentCookieParams["lifetime"], 
            $currentCookieParams["path"], 
            $rootDomain, 
            $currentCookieParams["secure"], 
            $currentCookieParams["httponly"] 
        ); 
        

        您可以在这里http://php.net/manual/en/function.session-set-cookie-params.php设置路径、cookie 本身的到期时间、根域、安全级别和更多参数

        通过 PHP 的有效方法如下:

        <?php 
        $currentCookieParams = session_get_cookie_params(); 
        
        $rootDomain = '.example.com'; 
        
        session_set_cookie_params( 
            $currentCookieParams["lifetime"], 
            $currentCookieParams["path"], 
            $rootDomain, 
            $currentCookieParams["secure"], 
            $currentCookieParams["httponly"] 
        ); 
        
        session_name('mysessionname'); 
        session_start(); 
        
        setcookie($cookieName, $cookieValue, time() + 3600, '/', $rootDomain); 
        ?>
        

        高效的编码器确保在设置参数本身之前设置参数,以便在用户离网时。 cookie 本身已过期。

        【讨论】:

          【解决方案4】:

          使用session_set_cookie_params(),您可以定义 cookie 选项(如生存期等)。如果会话开始,这些值将用于发送到客户端的 cookie。然而,cookie 仅在会话开始时发送,而不是用于来自客户端的任何进一步请求。这意味着在到达[session start time] + [timeout] 之后,客户端将删除 cookie。实际上,您定义了会话的最大生命周期。

          setcookie() 实际上会重新发送 cookie,无论它是新会话还是现有会话。这意味着每次请求都会更新 cookie,客户端只会在达到 [time of last request] + [timeout] 后将其删除。实际上,您定义了会话不活动的最大时间。

          【讨论】:

            【解决方案5】:

            setcookie() 定义一个 cookie 与其余的 HTTP 标头一起发送。与其他标头一样,cookie 必须在脚本的任何输出之前发送(这是协议限制)。这要求您在任何输出之前调用此函数,包括和标记以及任何空格。

            要使 setcookie() 正常工作,您需要为每个请求调用 session_set_cookie_params() 并在 session_start() 之前调用setcookie() 被调用。

            【讨论】:

            • 看起来 session_set_cookie_params() 用于服务器端,而 setcookie() 用于客户端。?
            • session_set_cookie_params() 表示选择我们用来设置cookie的参数,它可能是我们的用户名,或者其他的
            • 设置cookie在有参数使用时使用
            【解决方案6】:

            我认为,setcookie() 和 session_set_cookie_params() 函数的区别可能在于 domain.com 和 sub.domain.com。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-02-09
              • 2014-06-08
              • 2020-03-25
              • 1970-01-01
              • 1970-01-01
              • 2013-02-14
              • 1970-01-01
              相关资源
              最近更新 更多