在客户端设置多个 PHP cookie 的实际用途是啥

Posted

技术标签:

【中文标题】在客户端设置多个 PHP cookie 的实际用途是啥【英文标题】:What are the practical use of setting more than one PHP cookie in a client side在客户端设置多个 PHP cookie 的实际用途是什么 【发布时间】:2018-06-15 19:08:13 【问题描述】:

我对php中的会话和cookie之间的关系有一个模糊的理解。据我了解,cookie 应该有助于在服务器端为客户端实现会话,但我需要澄清我今天进行的一些实验。

<?php
    session_start();
    setcookie("userCookie", "myCookie");
if( isset($_GET["sessName"]) && isset( $_GET["sessValue"] ) ) 
    $_SESSION[filter_input(INPUT_GET, "sessName")] = filter_input(INPUT_GET, "sessValue");

foreach ($_SESSION as $sessNames)
    echo $sessNames;


?>

<form method="GET">
    <input type="text" name="sessName" placeholder="Session Name">
    <input type="text" name="sessValue" placeholder="Session value">
    <input type="Submit" >
</form>
?>

如果我在会话名称中提供值“foo”并提交,然后稍后从浏览器“chrome”中删除 userCookie,则用户输入仍将保留在会话中。但是,如果我从浏览器中删除“PHPSSID”cookie,留下“userCoookie”,用户输入将丢失。 这给我带来了一个问题,即向客户端发送多个 cookie “PHP 从 session_start() 开始托管 cookie 可以实现什么实际好处或用途”

【问题讨论】:

$_SESSION != $_COOKIE,它可能使用 cookie,但不应将其视为 cookie。 用途不同。 See this ...正如@LawrenceCherone 刚刚在他的评论中提到的那样。 你应该从在线资源、书籍等中真正了解“会话 cookie”和其他 cookie 之间的区别,而不是让这个社区教你。 我明白这一点,但是如果您在上面的示例中拥有多个 cookie,并且从浏览器中删除 PHP Cookie 会终止会话,那么如果 PHP 无法使用,则使用其他 cookie它保持状态 一个普通的 cookie 用于在浏览器关闭后保持应用程序状态,例如是否显示欢迎消息或某些菜单切换,或跟踪访问等。会话 cookie 用于在页面加载时保持状态。如果不想使用会话,请查看JWT。 【参考方案1】:

如果您使用$_SESSION,则无需设置任何cookie。 PHPSSID cookie 被 PHP 用来跟踪会话。

【讨论】:

你能检查一下你的浏览器,看看有多少 cookie 来自堆栈溢出吗? 这不是真的。会话是短暂的,通常仅在您持续使用该站点时才会持续。 Cookie 可以保存数月或数年。 Cookie 也对客户端应用程序直接可见,会话仅在服务器上。

以上是关于在客户端设置多个 PHP cookie 的实际用途是啥的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 或 JavaScript 在多个域上设置 cookie

PHP:setcookie() 和 unset() 不删除 cookie

php中的cookie用法

Java中的Cookie的意思、用途!

PHP 会话控制

PHP系列(十三)PHP会话控制