zoukankan      html  css  js  c++  java
  • Session简介

    指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话。

    会话跟踪技术有Cookie和SessionCookie技术是先出现的。

     Session 是另一种记录浏览器状态的机制。不同的是Cookie保存在浏览器中,Session保存在服务器中。用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器,这就是Session。

    Session比Cookie使用方便,Session可以解决Cookie解决不了的事情【Session可以存储对象,Cookie只能存储字符串。】。

    Session API

    • long getCreationTime();【获取Session被创建时间】

    • String getId();【获取Session的id】

    • long getLastAccessedTime();【返回Session最后活跃的时间】

    • ServletContext getServletContext();【获取ServletContext对象】

    • void setMaxInactiveInterval(int var1);【设置Session超时时间】

    • int getMaxInactiveInterval();【获取Session超时时间】

    • Object getAttribute(String var1);【获取Session属性

    • Enumeration getAttributeNames();【获取Session所有的属性名】

    • void setAttribute(String var1, Object var2);【设置Session属性】

    • void removeAttribute(String var1);【移除Session属性】

    • void invalidate();【销毁该Session】

    • boolean isNew();【该Session是否为新的】

    Session在用户第一次访问服务器Servlet,jsp等动态资源就会被自动创建,Session对象保存在内存里。

    如果访问HTML,IMAGE等静态资源Session不会被创建。

    Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,无论是否对Session进行读写,服务器都会认为Session活跃了一次

    由于会有越来越多的用户访问服务器,因此Session也会越来越多。为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个时间也就是Session的超时时间

    Session的超时时间默认是30分钟,有三种方式可以对Session的超时时间进行修改。

    • 第一种方式:在tomcat/conf/web.xml文件中设置,时间值为20分钟,所有的WEB应用都有效

    1.            <session-config>

    2.                <session-timeout>20</session-timeout>

    3.            </session-config>  

    • 第二种方式:在单个的web.xml文件中设置,对单个web应用有效,如果有冲突,以自己的web应用为准

    1.            <session-config>

    2.                <session-timeout>20</session-timeout>

    3.            </session-config>  

    • 第三种方式:通过setMaxInactiveInterval()方法设置

    1.        //设置Session最长超时时间为60秒,这里的单位是秒

    2.        httpSession.setMaxInactiveInterval(60);

    3.        System.out.println(httpSession.getMaxInactiveInterval());

    • Session的有效期与Cookie的是不同的

    • HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一个用户。于是乎:服务器向用户浏览器发送了一个名为JESSIONID的Cookie,它的值是Session的id值。其实Session依据Cookie来识别是否是同一个用户。

    • 简单来说:Session 之所以可以识别不同的用户,依靠的就是Cookie。

    •  该Cookie是服务器自动颁发给浏览器的,不用我们手工创建的。该Cookie的maxAge值默认是-1,也就是说仅当前浏览器使用,不将该Cookie存在硬盘中。

    • 禁用cookie,提供url重写技术,URL地址重写的原理:将Session的id信息重写到URL地址中服务器解析重写后URL,获取Session的id。这样一来,即使浏览器禁用掉了Cookie,但Session的id通过服务器端传递,还是可以使用Session来记录用户的状态。

    利用Session防止表单重复提交

    • 重复提交的危害:

      • 在投票的网页上不停地提交,实现了刷票的效果。

      • 注册多个用户,不断发帖子,扰乱正常发帖秩序。

    • 首先我们来看一下常见的重复提交。

      • 在处理表单的Servlet中刷新。

      • 后退再提交

      • 网络延迟,多次点击提交按钮

  • 相关阅读:
    [ASP.NET]ScriptManager控件使用
    [ASP.NET]使用uploadify上传图片,并在uploadify按钮上生成预览图
    [Javascript]js判断是否为undefined类型
    [Bug]转:使用jquery的 uploadify,在谷歌浏览器上总会崩溃的解决方法
    [NHibernate]Nhibernate如何映射sqlserver中image字段
    远程访问CENTOS的MYSQL数据库设置
    DELPHI的一些开源项目GIT地址
    unigui导出EXCEL使用NATIVEEXCEL
    IdHTTPServer(indy10)开发REST中间件
    centos7安装MYSQL
  • 原文地址:https://www.cnblogs.com/hongchengshise/p/10381496.html
Copyright © 2011-2022 走看看