【问题标题】:Is possible to keep session even after the browser is closed?即使关闭浏览器也可以保持会话吗?
【发布时间】:2011-04-10 17:19:30
【问题描述】:

谁能告诉如何维护一个会话(在 PHP 中),以便会话包含的内容被保留,即使在浏览器重新启动后也可以访问。

一般来说,会话​​会随着浏览器的关闭而过期,但我希望会话不会被关闭,以便下次使用浏览器时可以访问会话数据。

【问题讨论】:

  • 那肯定不再是会话数据,而是开始成为更持久的数据(像数据库一样)?
  • 如何使用 cookie 记录会话?然后,您需要使该 cookie 在浏览器会话之外持续存在 - 抱歉,我无法告诉您具体需要为 PHP 做什么。如果您通过向 URL 添加 ID 来使用无 cookie 会话,我不确定您是否可以这样做,除非您可以强制用户返回到相同的 URL。

标签: php session


【解决方案1】:

我发现的最简单和最好的方法是,我们应该在每个页面上输入它而不只是 session_start,而是有一个会话

$expire = 365*24*3600; // We choose a one year duration

ini_set('session.gc_maxlifetime', $expire);

session_start(); //We start the session 

setcookie(session_name(),session_id(),time()+$expire); 
//Set a session cookies to the one year duration

【讨论】:

  • 每次页面加载时都会创建一个新会话
  • 所以您所要做的就是检查是否没有现有会话。这应该不难做到。
【解决方案2】:

你可以这样做:(见session_set_cookie_parameters()session_name()

// long long time
$sessionTime = 365 * 24 * 60 * 60;
$sessionName = "my_session";
session_set_cookie_params($sessionTime);
session_name($sessionName);
session_start();

if (isset($_COOKIE[$sessionName])) {
    setcookie($sessionName, $_COOKIE[$sessionName], time() + $sessionTime, "/");
}

$sessionTime,另请参考this question

【讨论】:

    【解决方案3】:

    这是矛盾的。
    Session 代表“直到浏览器关闭”。
    会话是过期的。
    如果您不希望它过期,那么您可能根本不想要会话。

    您可能正在与 cookie 或数据库进行会话。

    【讨论】:

    • 会话使用 cookie,当浏览器关闭时会被删除,除非它们有特定的生命周期。
    • @elusive 1. cookie 不是唯一负责会话生命周期的东西。 2. 我说的是术语“会话”,而不是特定的 PHP 机制。但是 PHP 会话思想当然遵循这个定义。你可以无视这种行为,但你只会宠坏自己。
    • Cookie 在浏览器会话到期时到期,则称为 会话 cookie。当浏览器关闭时就是这种情况。但是这样的会话 cookie 不需要包含会话 ID。
    • cookie 根本不应该对会话生命周期负责;维护会话的是服务器,而不是客户端。
    • 令人惊讶的是,拥有如此高声誉的用户对当代会话实现如此陌生
    【解决方案4】:

    php(以及大多数网络技术)中的会话是这样工作的:

    您将会话 ID 存储在客户端计算机上的 cookie 中。

    当客户访问您的站点时,他会向您发送会话 ID。

    服务器在具有会话 id 的文件中查找会话数据并加载它。

    所以关闭浏览器对会话没有影响,但是如果浏览器在关闭它时清空cookie(我认为任何浏览器都不会这样做)。

    如果您想确保用户始终处于登录状态,您可以将其用户/密码存储在他的 cookie 中,但这并不安全。

    【讨论】:

    • 或者您可以在 cookie 中存储一个加密令牌。
    • 为什么不安全?如果您安全而巧妙地使用 cookie,那绝对是安全的。
    • @hey : 这不安全 : 我在你的电脑上,我去 cookie 目录,我读了你的登录信息,我 99% 确定你在其他一些网站上使用这些信息.如果是公用电脑,那就更有趣了。 @ignacio:确实,您可以创建自己的会话系统。
    • 如果您可以物理访问我的机器,我最不用担心 Cookie。
    • 好吧,如果你可以访问我的电脑,那就更糟糕的是去 chrome 设置,打开密码面板,那里就是所有密码
    【解决方案5】:

    在开始会话之前使用session_set_cookie_parameters() 为会话cookie 赋予非零生命周期,或将session.cookie_lifetime 设置为非零。

    【讨论】:

      【解决方案6】:

      如果您使用 cookie 而不是会话,则可以做到这一点。

      【讨论】:

      • 嗯,我的意思是使用 setcookie 而不是 session_start
      • 带有 url 参数(或 http 请求中的任何位置),但这不是默认行为,我认为这里我们正在查看正常情况。但你确实是对的
      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 2011-02-23
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 2012-12-28
      • 2019-10-03
      相关资源
      最近更新 更多