• <small id='0gca1whd'></small><noframes id='ay25d8e5'>

  • <tfoot id='whr5sis2'></tfoot>

    您的位置:荆州电脑信息网 > 设置问题 > 怎样设置session时间,在哪里设置

    怎样设置session时间,在哪里设置

    作者:电脑信息网日期:

    返回目录:设置问题


    如何修改SESSION的生存时间

    我们来手动设置 Session 的生存期:

    <?php
    session_start();
    // 保存一天
    $lifeTime = 24 * 3600;
    setcookie(session_name(), session_id(), time() + $lifeTime, "/");
    ?>
    其实 Session 还提供了一个函数 session_set_cookie_params(); 来设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用:
    <?php
    // 保存一天
    $lifeTime = 24 * 3600;
    session_set_cookie_params($lifeTime);
    session_start();
    $_SESSION["admin"] = true;
    ?>
    如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。
    php中session过期时间设置
    网上很多人给出了解答:修改php配置文件中的session.gc_maxlifetime。如果想了解更多session回收机制,继续阅读。(本文环境php5.2)

    概述:每一7a686964616fe78988e69d83364次php请求,会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效。

    1. session在server端(一般是Apache with PHP module)如何存在的?

    默认的,php会将session保存在/tmp目录下,文件名为这个样子:sess_01aab840166fd1dc253e3b4a3f0b8381。每一个文件对应了一个session(会话)。

    more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
    username|s:9:”jiangfeng”;admin|s:1:”0″;
    #变量名|类型:长度:值
    删除这里的session文件,就表示对应的session失效了。

    2. session在client端(一般是浏览器)如何存在的?

    session在浏览器端,只需要保存session
    ID(由server端生成的唯一ID)就可以了。有两种保存方式:在cookie中、在url里面。如果cookie中保存session
    ID,就可以看到浏览器的cookie中有一个PHPSESID变量。如果是URL传递的,就可以看到形如:
    index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381的URL。(在server端通过session.use_cookies来控制使用哪一种方式)

    3. 在server端,php如何判断session文件是否过期?

    如果”最后的修改时间”到”现在”超过了gc_maxlifetime(默认是1440)秒,这个session文件就被认为是过期了,在下一次session回收的时候,如果这个文件仍然没有被更改过,这个session文件就会被删除(session就过期了)。

    简单的说,如果我登录到某网站,如果在1440秒(默认值)内没有操作过,那么对应的session就认为是过期了。

    所以,修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了:(例如,我们把过期时间修改为86400秒)

    session.gc_maxlifetime = 86400
    然后,重启你的web服务(一般是apache)就可以了。

    注意:php5里面session过期使用了回收机制。这里设置时间为86400秒,如果session在86400秒内没有被修改过,那么在下一次“回收”时才真的被删除。

    3. session“回收”何时发生?

    默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的

    #概率是gc_probability/gc_divisor
    session.gc_probability = 1
    session.gc_divisor = 100
    注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。

    注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:cd
    /path/to/sessions; find -cmin +24 | xargs rm

    4. 一些特殊情况

    因为回收机制会检查文件的“最后修改时间”,所以如果某个会话是活跃的,但是session的内容没有改变过,那么对应的session文件也就没有改变过,回收机制会认为这是一个长时间没有活跃的session而将其删除。这是我们不愿看到的,可以通过增加如下的简单代码解决这个问题:

    <?php
    if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)
    $_SESSION['last_access'] = time();
    ?>
    代码会每隔60秒,尝试修改修改一次session。

    总结:如果想修改session过期时间,修改变量gc_maxlifetime就可以了。php5的session采用被动的回收机制(garbage
    collection)。过期的session文件不会自己消失,而是通过触发“回收”来处理过期的session。

    以下是设置session时间的3个方法:
    1. 在tomcat——>conf——>servler.xml文件zd中定义
    <Context path="/test" docBase="/test"
    defaultSessionTimeOut="3600" isWARExpanded="true"
    isWARValidated="false" isInvokerEnabled="true"
    isWorkDirPersistent="false"/>
    defaultSessionTimeOut="3600"
    2. 项目所在目录下的 web.xml中定义:
    <session-config>
    <session-timeout>20</session-timeout>
    </session-config>
    3. 在程序中定义:
    session.setMaxInactiveInterval(30*60);
    设置单位为秒,设置为-1永不过期


    方法一:web app server中,如websphere里可以设置超时时间为30分钟。
    方法二:在web.xml中的session-config配置
    session-timeout元素(WEB.XML文件中的元素)用来指定zd默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果 session-timeout元素的值为零或负数,则表示会话将永远不会超时。如:
    30 //30分钟
    方法三:setMaxInactiveInterval设置当前会话时间
    setMaxInactiveInterval设置的是当前会话的失效时间,不是整个web的时间,单位为以秒计算。如果设置的值为零或负数,则表示会话将永远不会超时。常用于设置当前会话时间。该优先级要比方法三中的优先级高。
    方法四:session中保存一个bean或者map,里面存储上相应的过期时间,一旦过期,remove掉。
    方法四可以通过一个线程去扫描,如果时间带了,线程自动清除,或者用的时候进行判断,用过后进行remove,如果使用线程自动remove,可以使用spring的线程池。
    <tfoot id='yzzctaay'></tfoot>
      <tbody id='gi45obyr'></tbody>

      <small id='iwaig8dn'></small><noframes id='o0pu2vv4'>

      相关阅读

      • 怎样设置session时间,在哪里设置

      • 电脑信息网设置问题
      • 如何修改SESSION的生存时间我们来手动设置 Session 的生存期:<?phpsession_start(); // 保存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime,
      关键词不能为空

      标签导航

      word怎么将一打开的默认值设置为搜狗输入法? 如何开启搜狗输入法记忆功能? 怎样把搜狗输入法的主面板调出来 怎么取消打开搜狗输入法输入法管理器的快捷键ctrl+shif... 跪求一完整WIN7 32位正版系统自带字体库 不甚感激 跪求win7原版完整字体库 跪求win7旗舰版 32位繁体语言包下载地址 给个win7(32位)比较全的字体包呗 在windows10系统下怎样使用微信截屏 已经是windows10系统了怎么继续升级windows10 Windows10系统下微信登陆失败如何处理 Windows10系统下怎样将微信小视频导出到电脑 怎么设置session的有效时间 一般session失效时间怎么设定? 如何设置session的生存时间 怎么设置session超时时间 为什么我Win7的Windows自动更新关不掉 win7系统自动更新关闭有什么影响 关闭Win7的Windows update自动更新对系统有影... windows7旗舰版关闭自动更新后会不会有影响 需不需要更... Win10语言栏里面的输入法跑到左边来了怎么设置回去? windows10的语言栏怎么恢复到时钟左边 win10语言栏还原 win10如何恢复任务栏中语言栏位置 联想Lenovo OEM Windows7旗舰版去哪下载好?... 联想OEM WIN7 有支持64位 下载的吗? 谁有真正的联想win7sp1专业版 知识库那有点问题 联想笔记本专用WIN7 64位系统下载 win7的桌面不能随意摆放图标,该如何设置 请问我从这里下载的window10是官网的正版吗?是不是镜像... 谁给我个win10原版系统,百度云 微软官网下载的win10是正版的嘛 求给个win10正版的镜像文件链接,或者百度云 WIN7专业版64位怎么更换系统语言(中文转英文) WIN7 64位专业版改变系统语言设置? WIN7 64位专业版中文怎么改变英文系统 win7英文专业版怎么变成中文专业版 苹果7p怎么修改时间啊 苹果7p手机怎么设置每月定时提醒? 苹果7p怎么在桌面添加时间 苹果7p手机怎样设置每月定时提醒 win10系统网络不稳定怎么办 网络不稳定解决方法 如何解决win10 网络不稳定 Win10系统连接无线wifi网络不稳定如何解决 win10怎么测试网络稳定不稳定 win7系统如何设置分屏显示 WIN7不能左右半屏?? win7电脑桌面显示分屏了怎么办 win7的快速左右分屏等等功能消失了 华为手机,在屏幕上怎么设置时间和日期 手机上的时间和日期怎么调整正确的? 如何在手机屏幕上设置时间和天气 手机时间设置在哪里

      电脑蓝屏,win7,win10相关问题_荆州电脑信息网