精华内容
下载资源
问答
  • session存活周期 刷新
    2014-09-25 16:44:02
    session的存活时间从用户的访问开始算起,第一次进来,20分钟开始倒计时!在这20分钟内,他没有做任何点击链接或刷新按钮的话,20分钟后,session就失效。
    其次,在这20分钟内每次点击网页链接,和刷新网页,session的存活时间从新算起,即刷新一次,生命周期从新开始。又是20分钟倒计时喽!!
    最后:session的存活,我做过实验是这样的:session存活时间20分钟,时间未到,用户关闭网页或浏览器,session在服务器那还是被认为是活着的,服务器认为session 还活着,知道20分钟结束后,服务器认为该会话结束。
    例外:就是用了request.getSession().invalidate();让session当场毙命!那就另当别论了,这样直接告诉服务器,他死了。用户端也是一样!!
    更多相关内容
  • 而越来越复杂的WEB应用,需要保存一些用户状态信息。这时候,Session这种方案应需而生。PHP从4.1开始支持Session管理。自 PHP 4.2.3 起用php启动 (文件修改时间)来代替了 atime,也就是说如果浏览器带有该sess...

    http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议。所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的。而越来越复杂的WEB应用,需要保存一些用户状态信息。这时候,Session这种方案应需而生。PHP从4.1开始支持Session管理。

    自 PHP 4.2.3 起用php启动 (文件修改时间)来代替了 atime,也就是说如果浏览器带有该session对应的cookie 该cookie的存活期中 在gc_maxlifetime设置的时间 间隔内刷新浏览器 则该session “永远”不会失效。由此还可以通过setcookie(session_name(),session_id(),time()+N)

    来控制session生命周期,一旦cookie失效浏览器就“瞎”了,因为http本身是“无状态”协议,必须通过cookie来维持身份。

    session相关概念

    1) session id

    用户session唯一标识符,随机生成的一串字符串,具有唯一性,随机性。主要用于区分其它用户的session数据。用户第一次访问web页面的时候,php的session初始化函数调用会分配给当前来访用户一个唯一的ID,也称之为session_id。

    2) session data

    我们把需要通过session保存的用户状态信息,称为用户session数据,也称为session数据。

    3) session file

    php默认将session数据存放在一个文件里。我们把存放session数据的文件称为session文件。它由特殊的php.ini设置session.save_path指定session文件的存放路径,centos5.3操作系统,php5.1默认存放在/var/lib/php/session目录中。用户session文件的名称,就是以sess_为前缀,以session_id为结尾命名,比如session id为vp8lfqnskjvsiilcp1c4l484d3,那么session文件名就是sess_vp8lfqnskjvsiilcp1c4l484d3。

    4) session lifetime

    我们把初始化session开始,直到注销session这段期间,称为session生命周期,这样有助于我们理解session管理函数。

    与session存储相关php.ini设置

    1) session.save_handler = file

    用于读取/回写session数据的方式,默认是files。它会让PHP的session管理函数使用指定的文本文件存储session数据。

    2) session.save_path =“/var/lib/php/session”

    指定保存session文件的目录,可以指定到别的目录,但是指定目录必须要有httpd守护进程属主(比如apache或www等)写权限,否则无法回存session数据。当指定目录不存在时,php session环境初始化函数是不会帮你创建指定目录的,所以需要你手工建立指定目录。

    它还可以写成这样session.save_path =“N;/path” 其中N是整数。这样使得不是所有的session文件都保存在同一个目录中,而是分散在不同目录。这对于服务器处理大量session文件是很有帮助的。(注:目录需要自己手工创建)

    3) session.auto_start = 0

    如果启用该选项,用户的每次请求都会初始化session。我们推荐不启用该设置,最好通过session_start()显示地初始化session。

    与session回收相关的php.ini设置

    1)session.gc_probability和session.gc_divisor

    由这二个函数决定了启用GC的概率,默认是1/1000。也就是说,每一千次用户请求中有一次会启动GC回收session。启动GC进程不宜过于频繁。上面的例子,我们可以看到,它会每次检查session.save_path目录下每个文件的状态。这样会降低php的执行效率。

    2) session.gc_maxlifetime = 1440

    设置session存活时间,单位是秒。每次GC启动后, 会通过stat得到session文件最后访问的unix时间,通过现在时间减去文件最后访问时间之间大于session.gc_maxlifetime,则会删除该文件。

    Session 是如何来判断客户端用户

    它是通过 Session ID 来判断的, Session ID就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,重新注册一个 Session ID。如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。我们来手动设置 Session 的生存期:<?php

    session_start();

    // 保存一天

    $lifeTime = 24 * 3600;

    setcookie(session_name(), session_id(), time() + $lifeTime, "/");

    ?>

    其实PHP5 Session还提供了一个函数 session_set_cookie_params(); 来设置PHP5 Session的生存期的,该函数必须在 session_start() 函数调用之前调用:<?php

    // 保存一天

    $lifeTime = 24 * 3600;

    session_set_cookie_params($lifeTime);

    session_start();

    ?>

    1, PHP使用Cookie的方法传递session id。尽量不要使用GET方法传递session id,因为这样很不安全。

    2, 可以通过setcookie()的方法,将客户端的session id的Cookie记录删除。

    3, PHP GC进程由session初始化启动。但不是每一次用户请求都会被启动,它的启动概率默认是1/1000。过于频繁访问的网站,并发量大的网站,可减小PHP GC的启动频率。PHP GC回收session会降低php的执行效率。

    4, 通过下面代码,优化session回收<?php

    session_start();

    if (isset($_SESSION['SESS_TIMEOUT'])) {

    if ($_SERVER['REQUEST_TIME'] > $_SESSION['SESS_TIMEOUT']) {

    setcookie(session_name(), session_id(), -1, '/');

    session_unset();

    session_destroy();

    }

    } else {

    $_SESSION['SESS_TIMEOUT'] = $_SERVER['REQUEST_TIME'] + 3600;

    }

    展开全文
  • 会话,session的生命周期,会话的清除,创建cookie

    会话

    从客户端打开浏览器开始访问服务器,到服务器给客户端响应数据,客户端继续访问服务器,直到客户端关闭浏览器,整个过程称为一次客户端和服务器之间的会话。

    在这个会话的过程中我们可以保存用户在整个会话过程中的数据,不管用户发起了多少次请求,数据都可以保存在其中,在用户的任何一次请求中,都可以获取到前面已经保存的数据。要完成这个功能,就需要使用sun公司给我们提供的Cookie对象或者Session对象。

    Cookie对象主要是给客户端写数据,数据需要保存在客户端,Session对象主要是在服务器端创建和当前用户相关的一个容器,专门为每个不同的用户保存数据。

    1:session

    Session:会话技术,从客户端打开浏览器访问服务器,到最后客户端关闭浏览器,整个过程称为一次会话。

    在这个会话的过程中,服务器会针对每个客户端创建一个和客户端相关的唯一的临时容器,这个容器用于保存当前客户的所有信息。

    并且在给客户端响应数据的时候,会给客户端回送一个唯一标识当前客户端相关的临时容器的id,在客户端下次访问服务器的时候,会携带这个id信息(cookie),在服务器端就可以找到和客户端相关的临时容器, 继续使用这个临时容器。

    如果获取这个Session对象,为每个客户端服务:在servlet可以通过Request对象获取和当前客户端相关的唯一Session对象。在jsp中可以直接使用

    在这里插入图片描述

    2:sessionId

    每个session都有一个唯一的sessionid,

    session.getId();可以获取session的id

    3:session的生命周期

    Session称为服务器端用于保存用户的信息的容器。它主要针对浏览器而言。

    Session对象到底什么时候创建的:

    Session对象的创建时间是:程序中第一次调用getSession方法时,这时web服务器会创建Session对象。并把这个Session对象返回。

    Session对象一旦创建好了就为后续用户的所有操作服务,主要是保存用户的一连串的操作的信息。只要用户一直在操作,那么这个Session对象就会一直存在。

    Session的销毁时间:

    1、一般在web服务器中Session有默认的存活时间,一般是半小时。如果在30分钟内,用户一直没有做任何操作,这时服务器会当前这个Session自动的销毁。

    2、不正常关闭服务器。正常关闭服务器,服务器会把这个Session对象使用io流中的序列化技术保存在tomcat/work目录下

    3、在Servlet程序中手动的销毁Session对象。session.invalidate();

    Session的存活时间可以在web.xml中配置也可以通过方法指定:

    setMaxInactiveInterval(int interval); //单位是秒,一般是在存储值的时候进行设置

    注意:这里的时间是以分钟为单位

    <session-config>
            <session-timeout>30</session-timeout>
    </session-config>
    

    4:会话的清除

    设置会话失效:session.invalidate();

    移除会话的一个属性:session.removeAttribute(key);

    5:cookie

    Cookie技术主要需要依赖于给用户响应数据时,服务器给用户的本地(客户端)写数据。Cookie中存储的是服务器端发送到客户端的少量信息。

    创建一个 cookie,cookie 是 servlet 发送到 Web 浏览器的少量信息,这些信息由浏览器保存,访问服务器的时候,会带着cookie中存储的信息到服务器。cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理。

    Cookie技术主要解决的是在客户端和服务器进行交互的过程中,保存用户的数据,这些数据主要是通过服务器使用Cookie对象写到客户端的浏览器中,然后在浏览器中保存这些数据。Cookie对象可以保存用户和服务器的交互数据,但是需要保存在客户端。

    6:cookie API

    创建cookie:

    在javax.servlet.http 包中有 Cookie类,它拥有接收2个参数的构造方法,可以创建一个Cookie对象。

    Cookie(String name, String value) :name就是给cookie起一个名字,value是当前Cookie具体的数据。类似于一个map,通过name获取具体的值。

    使用new就可以创建出一个cookie- 服务器端

    获取cookie

    需要使用HttpServletRequest对象中的getCookies方法,会得到一个Cookie数组,这是因为一个站点可能会存放多个Cookie数据

    例如:Cookie[] cookies = request.getCookies();

    得到Cookie数组之后,判断cookies数组是否存在 cookies == null,如果cookies存在,根据cookie的name去查找指定cookie

    发送cookie

    创建好Cookie对象之后,需要使用HttpServletResponse中的addCookie方法,将Cookie对象添加到响应中,然后发给客户端。

    例如:response.addCookie(cookie); // 将cookie写到客户端

    在Cookie对象中提供了getName可以获取Cookie的key值,提供的getValue可以获取key对应的value值,同时也可以使用setValue给当前的Cookie对象设置value值。

    SetPath设置cookie可以访问资源路径

    SetMaxAge() - 设置cookie的生存时间 ,单位是秒

    创建cookie代码

    <%
    	//  创建cookie
        Cookie cookie1 = new Cookie("myName",user);
        //  设置生命周期
        cookie1.setMaxAge(60*60*60);
        //  设置访问权限
        cookie1.setPath("/");
        //  写回去,写到用户客户端
        response.addCookie(cookie1);
    %>
    
        //  创建cookie
        Cookie cookie = new Cookie("uname","value");
        //  设置生命周期
        cookie.setMaxAge(60*60*60);
        //  设置访问权限
        cookie.setPath("/");
        //  写回去,写到用户客户端
        response.addCookie(cookie);
        //  获取cookies并进行回显
        Cookie[] cookies = request.getCookies();
        //  遍历数组,获取每一个cookie,并获取每一个cookie的name和自己定义的name比较
        String cookValue = "";
        for (int i = 0; i < cookies.length; i++) {
            String name = cookies[i].getName();
            if ("myName".equals(name)) {
                cookValue = cookies[i].getValue();
            }
        }
    
    展开全文
  • 但是在使用过程中发现开源gin这种web框架,只对session最大生命周期进行了控制,却不支持刷新session生命周期,那么问题来了,如果登录成功,服务端生成一个sessionid,客户端(一般为浏览器)拿着这个sessionid去...

    近来,在项目中使用了一段时间的golang进行web开发,相对于java而言,golang语法更为简洁,与docker等集成也更为友好。但是在使用过程中发现开源gin这种web框架,只对session最大生命周期进行了控制,却不支持刷新session生命周期,那么问题来了,如果登录成功,服务端生成一个sessionid,客户端(一般为浏览器)拿着这个sessionid去访问接口数据的时候,服务器对其进行校验,如果校验通过,应当允许客户端访问资源,否则应当跳转到登录页面。校验通过访问到了资源,说明客户端在与服务端进行互动,不应该在session最大存活时间到期被踢出。而目前gin session无法修改session过期时间,经过查看源码,发现session中的Option变量来源于http.Cookie,此类中有一个Expires支持过期时间的设定,因而在校验通过的时候可以通过以下代码实现session过期时间的刷新

    validlogin.go中摘取如下代码

    //获取cookie中的session名称对应的session

     cc,_ :=c.Request.Cookie("sessionid")
    
       if cc!=nil{
       cookie :=http.Cookie{
          Name:     "sessionid",
          Value:    cc.Value,
          Expires: time.Now().Add(du),
          Path:     "/",
          Domain:   "",
          Secure:   false,
          HttpOnly: true,
       }
    //设定客户端cookie
       http.SetCookie(c.Writer,&cookie)
    }
    展开全文
  • JavaWeb中的九大内置对象、四大作用域、session的生存周期 转载于:http://www.yelook.com/1439.html JSP中的九大内置对象 JavaWeb中,JSP引擎在将JSP转译为 Java 文件时,就创建了一系列对象,这些内置对象不需要...
  • 主要介绍了PHP会话控制:Session与Cookie详解,本文详细讲解了PHP中Session与Cookie的相关知识,涵盖面较广,需要的朋友可以参考下
  • php中的session有效期默认是1440秒(24分钟),也就是说,客户端超过24分钟没有刷新,当前session就会失效。当然如果用户关闭了浏览器,会话也就结束了,Session自然也不存在了!大家知道,Session储存在服务器端,...
  • tp5 session学习

    千次阅读 2018-07-19 15:34:08
    1.手册上写了:可以直接使用think\facade\Session类操作SessionSession会在第一次调用Session类的时候按照session.php配置的参数自动初始化,或者Session::init();进行实例化 return [ 'prefix' => 'think',...
  • 有关session生命周期如何设置的问题

    万次阅读 2012-02-08 19:49:23
    昨天群里有个朋友问有关session生命周期如何设置的问题。本人也没做过高负载的项目 所以一般都是用memcache存储session便于控制.所以对php 处理session的方案也没有过多了解,就随口就回答了个gc_maxlifetime. ...
  • php中会话超时时间不易控制,多种因素影响导致随机性太大;文档介绍如果严格控制php中SESSION过期时间
  • 相比之下 LocalStorage 生命周期就很长了,LocalStorage 是可以一直存活的,哪怕是你关闭浏览器,他依然存在。除非人为手动删除,所以我们可以将一些需要永久性存储的数据放置在 LocalStorage 中(当然也可以是 ...
  • servlet之session&cookie

    2020-12-06 17:56:45
    session和cookie可以实现会话跟踪技术,功能有重叠一般结合使用 session和cookie结合使用的例子:用户访问浏览器,服务器生成JESSIONID,JESSIONID是一个cookie,每次http请求会携带此cookie,用来让服务器知道选择...
  • Session的详解与使用

    千次阅读 2021-06-08 17:32:20
    之前的文章已经介绍了Cookie可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些Cookie,如果Cookie很多,这无形地增加了客户端与服务端的数据传输量,为了解决这个问题,Session就出现了。...
  • Session攻击

    2022-07-27 09:21:43
    但如果攻击者能一直持有一个有效的Session(比如间隔性地刷新页面’以告诉服务器这个用户仍然在活动),而服务器对于活动的Session也一直不销毁的话,攻击者就能通过此有效Session—直使用用户的账户,成为一个永久...
  • Session对象(超详细)

    热门讨论 2022-05-10 17:11:45
    4.Session的生命周期 5.案例分析-创建 Session 和获取(id 号并判断是否为新) 结束语 前言 接上一篇Cookie经典案例—实现显示用户上次服务时间的显示_小孙的代码分享的博客-CSDN博客 我们了解了JavaWeb中的...
  • Session和Cookie知识概括

    2020-07-10 16:38:23
    Session和Cookie一级目录二级目录三级目录 一级目录 二级目录 三级目录
  • 有一些方法是session存活周期缩短,然后前台一直ajax发送心跳包,保证session的更新;但是这样势必给服务器照成压力。 现在有没有一种方法就是从浏览器出发,可以监听浏览器关闭前的事件,或者是在关闭浏览器时调...
  • 本文介绍了 Session(服务器端数据存储技术)的相关内容。。。
  • web开发会话技术-SessionSession的作用Session基本原理Session可以做什么理解SessionSession常用方法Session底层机制分析Session使用流程服务端如何通过浏览器找到对应Session Session的作用 Session基本原理 当...
  • 如何调整cookie的生命周期

    千次阅读 2020-12-19 18:02:50
    一、什么是cookie形象比喻成“网络身份证”指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。(1)记录信息的盒子(2)识别每一个网络用户的证件(3)12个月的存活期(4)每当用户...
  • ServletServlet什么是Servlet理解servlet原理Servlet生命周期resquest中常见的方法reponse常见方法Cookie概念工作原理存储cookie读取cookieSessionsession访问量Session持久化cookie vs sessionServlet上传文件 ...
  • session

    2018-12-07 11:08:11
    在web开发中,session是个非常重要的概念。Session一般译作会话,Session是一种基于HTTP协议的用以增强web应用能力的机制或者说一种方案,它不是单指某种特定的动态页面技术,而这种能力就是保持状态,也可以称作...
  • (1)类型不同 Page是baiObject类型 ...全局作用范围,整个应用程序共享,生命周期为从应用程序启动到停止,在这个过程中application里的变量一直在累加,除非你重启tomcat或是人工删除,否则它会一直变大
  • 目录 Cookie 与 Session 简单了解 Falsk 中 Session 的保管机制 相关的配置 使用 Flask-Session 三方组件 基础练习题 Cookie 与 Session 简单了解 Cookie: #存储大小受限,储...
  • java之Cookie和Session

    2022-06-27 18:41:11
    一、会话 1、会话:一次会话中...客户端会话技术:Cookie服务器端会话技术:Session 4、http协议无状态 状态的含义: 客户端域服务器在某次会话中产生的数据,这些数据存在于缓存区中,缓存区中存储、记忆...
  • 1, 将session生命周期设为1分钟后, 启动项目, 登录后隔5秒钟就刷新一次页面,一直持续了2分钟还是处于登录状态, 说明session还在 2, 停止刷新, 静置1分钟, 再次刷新, 已经不是登录状态, 说明session已经丢失

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,833
精华内容 1,533
关键字:

session存活周期 刷新