【问题标题】:php how to preserve session state for prolonged period of time? troublesphp如何长时间保存会话状态?烦恼
【发布时间】:2010-02-19 14:40:38
【问题描述】:

我无法长时间保存会话状态。我使用会话来保留登录状态。在任何其他代码之前,我需要在每个页面顶部的以下代码 sn-p。首先,我是否缺少任何设置?

session_cache_expire(2880); //set session to expire in 48 hours 
session_start();

有些人在 48 小时到期时间之前退出。什么类型的事情会导致这种情况?我知道关闭浏览器会终止会话,但事实并非如此。

据我所知,当用户处于非活动状态数小时或更长时间时会发生这种情况。

用户在积极浏览网站时永远不会注销。

什么给了?

【问题讨论】:

  • 我曾认为将会话数据写入某种永久存储(即数据库)然后在用户返回站点时重新加载它会比滥用会话更好的解决方案这个。
  • 我不知道滥用...使用单个会话变量来跟踪正在登录的用户...很好...好的。
  • 我同意 Ant 的观点,较长的会话生命周期会增加黑客可以访问会话的窗口。我个人倾向于使用 30 分钟的超时。如果用户与会话进行交互,则 30 分钟将再次开始。您会在打开、登录和解锁 2 天后让您的计算机无人看管吗?
  • 这真的取决于您的信息有多敏感,如果有人真的想闯入您的计算机,30 分钟的会话时间不会阻止他们。
  • 我更多地考虑会话存储在哪里:php.net/manual/en/session.requirements.php 会话存储在 RAM 中。因此,将会话设置为持续 48 小时 a) 完全不可扩展,并且 b) 如果您的服务器重新启动,这是一个坏主意。

标签: php session


【解决方案1】:

这只影响浏览器缓存会话页面的时间。

尝试设置 gc_maxlifetime 变量(值以秒为单位):

ini_set("session.gc_maxlifetime", "172800");

【讨论】:

  • ini_set 和 session.gc_maxlifetime 自 PHP4 天以来就在 PHP 中,因此它们可以在 5.1、5.2、5.3... 上工作。
  • 哦,我读了手册,它说 PHP5 >= 5.3。起初我没有正确阅读它。谢谢!
  • 这似乎成功了,谢谢安迪!根据php手册默认maxlifetime设置为1440秒(24分钟),这很可能是问题所在。 codingforums.com/archive/index.php/t-99224.html 第二篇文章很有趣,我不确定这是否是另一个原因,但是当延长垃圾收集 maxlifetime 时,用户丢失会话的频率会更好。
【解决方案2】:

session_cache_expire 只影响 HTTP 缓存过期时间。您要做的是使用 cookie 来设置会话数据。

以下是我用于登录/注销会话的示例。

<?php

session_start();

if ($action == "logout") {
  setcookie('sId', '', time()-60*60*24*365); //set sId cookie to expire

  session_destroy();
} else if (empty($_SESSION['sId'])) { //if cannot get sId from session
  if (isset($_COOKIE['sId'])) { //check if sId is in cookie
    $sId = $_COOKIE['sId'];
  } else { //get a new sId and set to cookie
    $sId = session_id();
    setcookie('sId', $sId, time()+60*60*24*365);
  }

  $_SESSION['sId'] = $sId; 
} else { //get sId from session
    $sId = $_SESSION['sId'];
}

?>

【讨论】:

  • 我存储的会话变量是用户登录 ID,将其存储在 cookie 中是个好主意吗?
  • Cookies 根本不是存储会话数据的好方法——特别是如果它很敏感,因为它会随着每个请求传入和传出服务器。它是您希望存储在 cookie 中的会话 ID,PHP 作为标准执行,然后您使用 php.ini 自定义会话处理(例如超时)或编写自己的。
猜你喜欢
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2011-12-17
  • 2011-02-15
  • 2017-04-15
相关资源
最近更新 更多