【问题标题】:sessions and cookies lifetime会话和 cookie 生命周期
【发布时间】:2014-01-01 19:58:18
【问题描述】:

当我们使用 session_start() 行时,有两种可能性: 1.我们正在开始一个新的会话(这个方法通过一个cookie工作,它的过期时间默认为零,当会话结束时) 2. 我们正在继续当前的会话。

此外,如果我们在其中一个 php 文件中使用函数 session_set_cookie_params($lifetime);这允许我们更改会话 cookie 的过期时间。

我的问题是,如果我们在会话开始之前写入另一个 php 文件 session_set_cookie_params($lifetime);它是否会更新会话的 cookie 以再过期 $lifetime 秒? (因为通常在再次设置 cookie 时会更新 cookie)

这里有一些 php 文件演示了我要问的内容:

第一个文件:

<?php
$lifetime=30;
session_set_cookie_params($lifetime);

session_start();

$_SESSION["username"] = "kobe" ;

?>

第二个文件:

    <?php
$lifetime=30;
session_set_cookie_params($lifetime);

session_start();


echo "Username = " . $_SESSION["username"];

?>

访问第一个文件后,会话应该在 30 秒后结束。如果我将在 30 秒之前访问第二个文件,它会更新 cookie 以再存活 30 秒吗?如果不是你能解释为什么吗???

编辑:根据我的检查,我了解到服务器仅在首次初始化会话时才向浏览器发送响应以构建会话的 cookie。现在将使用的唯一生命周期参数是在用户将访问的第一个文件中。 从那时起,会话将在每个生命周期内重新启动??是这样吗???

演示:假设用户访问第一个文件,该文件说要构建一个持续 30 秒的会话 cookie。然后他访问第二个文件,它说生命周期为 30 秒的行将被忽略,直到会话结束的计数是我们第一次访问第一个文件的位置。在那 30 秒之后,它将开始再计算 30 秒,然后再次终止会话,然后再次... 是这样吗???

【问题讨论】:

    标签: php session cookies


    【解决方案1】:

    我不确定您要找出什么 - 但是,使用会话和 cookie:有几种方法可以制作 cookie,但在您的情况下,我使用的是 php,因为您尝试设置 cookie 是 php与。

    Cookie 是存储在客户端(您的计算机)上的数据,它具有唯一标识符,服务器可以在其中读取/访问 cookie。除了创建 cookie 的服务器之外,没有其他服务器可以访问 cookie。

    设置 cookie 往往使用三个参数来实现:

    setcookie(nameOfCookie, valueOfData, expire).
    

    在您的情况下,您可能希望使用这种方法:

    setcookie("getUsername","kobo", 30);
    

    在你的 php 脚本中获取 cookie:

     $_COOKIE["getUsername"];
    

    任何时候服务器发现有相同名称的 cookie,但数据不同,它会覆盖它。

    Session 类似,但是每次浏览器退出/关闭时它都会“刷新”,并且必须再次通过安全协议。设置会话数据需要较少的参数,例如:

     $_SESSION['username'] = "Kobo";
    

    并检索数据:

     echo $_SESSION['username'];
    

    使用会话数据的问题是,您必须在脚本开头使用session_start();,然后这些函数才能起作用。

    【讨论】:

    • 不完全是。可以将会话配置为工作一段时间,或者通过更改 php.ini 中的设置或通过使用 session_set_cookie_params($lifetime) 的脚本;功能。会话工作的机制是创建一个 cookie。我想知道我最后的结论是否正确???
    • 关于您对 php.ini 或 session_set_cookie_params() 的评论;功能 - 你是对的。是的,会话协议使用 cookie 机制来工作。 $lifetime=30;此 cookie 在第一次访问 cookie 后 30 秒消失,期间。但是如果你使用这个: $lifetime=time()+30; cookie 从第一次访问 cookie 开始提前 30 秒设置。如果 cookie 在第二次访问时仍然处于活动状态,cookie 将保持活动状态并将 cookie 重置为新的过期时间(接下来的 30 秒),如果在 30 秒内没有访问,它就会死亡。
    • 我不认为你是对的。从我检查的内容来看,服务器仅在会话终止时才向浏览器发送响应以更新 cookie 会话。每次访问继续会话的页面时更新 cookie 会话的方法是使用函数 set_cookie
    • 你措辞正确。如果您使用会话,则无需担心 cookie,因为它自己使用 cookie 机制和功能。我以为你想要更多的手动方法来使用 cookie。对不起。 :) 也许这个链接是你正在深入寻找的。 stackoverflow.com/questions/16265118/…
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    相关资源
    最近更新 更多