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

时间:2017-02-22 07:43:05

标签: php session cookies

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

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

我试图理解PHP手册,但没有明确的差异。

谢谢

6 个答案:

答案 0 :(得分: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"] 
); 

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

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本身已到期。

答案 1 :(得分:3)

session_set_cookie_params(秒)

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

设置Cookie()

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

答案 2 :(得分:1)

有两种类型的Cookie:

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

持久性Cookie:这是setcookie(),这些文件会保留在您的某个浏览器子文件夹中,直到您手动删除它们或浏览器根据其中包含的持续时间段删除它们为止持久性的cookies。

例如,如果您希望将Cookie保存一周:

$activations = UserActivations::query()
    ->columns("UserActivations.id")
    ->leftJoin("Deals", "d.id = UserActivations.dealId", "d") 
    ->where("UserActivations.state = 1")
    ->execute();

答案 3 :(得分:0)

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

要使 setcookie()正常工作,您需要为每个请求调用 session_set_cookie_params(),之后 session_start()和其他人一样 setcookie()被调用。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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