如何检查php中会话丢失的原因是什么?

如何检查php中会话丢失的原因是什么?,php,session,Php,Session,我已经在用户登录时存储了用户id,但是,我发现它有时会丢失,会话丢失的常见原因是什么 我使用了超时插件(空闲一段时间将发出警告并帮助您注销) 还有一些javascript可以在页面之间传输 您已经编辑了列表 clear.php if (isset($_SESSION['lname'])) unset($_SESSION['lname']); if (isset($_SESSION['creminder'])) unset($_SESSION['creminder']); if (isse

我已经在用户登录时存储了用户id,但是,我发现它有时会丢失,会话丢失的常见原因是什么

我使用了超时插件(空闲一段时间将发出警告并帮助您注销) 还有一些javascript可以在页面之间传输

您已经编辑了列表

clear.php

    if (isset($_SESSION['lname']))
unset($_SESSION['lname']);
if (isset($_SESSION['creminder']))
unset($_SESSION['creminder']);
if (isset($_SESSION['subscribe']))
unset($_SESSION['subscribe']);
if (isset($_SESSION['unsubscribe']))
unset($_SESSION['unsubscribe']);
这用于存储会话

$user=$_SESSION['username'];

谢谢

PHP以这种方式管理会话:

会话_start()时,将在Web服务器上创建一个文件。该文件是一个名为session1234的文本文件。在用户浏览器上设置cookie,cookie包含值“session1234”。每次用户调用同一域上的页面时,浏览器都会无声地发送该cookie

这样就可以识别用户,并从服务器上的会话文件中取出用户的会话数据

会话过期的原因:

  • 通常在从webapplication注销时,我们使用会话_destroy(),它会销毁服务器会话1234上的文件。因此,如果用户再次使用cookie内容session1234调用站点:服务器上不存在文件session1234(已通过注销删除),则用户未通过身份验证

  • 发生超时:文件session1234从服务器默认删除20分钟(可在php.ini中配置)。如果用户再次调用该站点,与之前相同。每次用户执行操作(调用服务器)时,服务器都会更新会话文件的生存时间
  • 用户清除浏览器cookie(如果有人想清除浏览器的历史记录,则可能发生):cookie丢失,浏览器不发送cookie,服务器不接收cookie,并且无法对用户进行身份验证

  • 希望它有帮助

    PHP处理会话非零过期的方式也有一个缺点;基本上,如果您将会话cookie设置为在15分钟内过期,它将在会话开始后的15分钟内过期。。。它不会刷新到期时间

    要运行在用户“做某事”时刷新的会话,您需要将到期日期存储为会话变量,并在启动会话时检查该变量,如有必要,重新启动会话

    我以前尝试过在会话启动时更新会话cookie中的到期日期

    这不太可能,但也有可能,会话垃圾收集生存期也低于cookie到期的生存期。有一个负载可以处理一些常见会话问题,您可以通过在运行时设置它们来覆盖其中的大多数问题:

    ini_set('session.gc_maxlifetime' 900);
    ini_set('session.cookie_lifetime' 0); //ALWAYS set this to 0 - so the cookie will only expire when the browser is closed
    ini_set('session.cookie_domain', '.domain.ext'); //always start with a "." if you want to cover multiple sub-domains
    ini_set('session.cookie_path', '/'); //always use "/" unless you want to limit the cookie to a specific path "/admin" for instance
    

    就我个人而言,我会将所有会话处理内容放入一个(单例模式)类中,并在构造函数中处理验证和过期问题。

    如果取消设置$\u会话['SID'],则会丢失内容是吗?或者这不是你的问题?也许更清楚地解释一下你的问题或问题会给你一个答案。我有store$_SESSION['username',],即使我没有注销系统,它也会丢失,我想知道问题是什么并修复它,谢谢。服务器错误配置设置了错误的cookie路径/域,并对其他目录或子域中的站点其他部分“不可见”。文件会话1234从服务器默认值中删除20分钟,可能是服务器设置问题。此设置的标题是什么?thanksperharps这是服务器设置问题,如何检查?谢谢
    $user=$_SESSION['username'];
    
    ini_set('session.gc_maxlifetime' 900);
    ini_set('session.cookie_lifetime' 0); //ALWAYS set this to 0 - so the cookie will only expire when the browser is closed
    ini_set('session.cookie_domain', '.domain.ext'); //always start with a "." if you want to cover multiple sub-domains
    ini_set('session.cookie_path', '/'); //always use "/" unless you want to limit the cookie to a specific path "/admin" for instance