# 1.session(会话)是什么?

服务器为了保存用户状态而创建的一个特殊的对象。

注:

当浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),接下来,服务器会将sessionId以cookie的方式发送给浏览器;

相比cookie更安全,并且更具可辨识性,但是加大了空间和时间的消耗

当浏览器再次访问服务器时,会将sessionId发送过来,服务器就可以利用sessionId找到对应的session对象。

# 2.如何获得session对象?
## (1)方式一

HttpSession s = request.getSession(boolean flag);
注:
flag为true时:(...)
        先查看请求当中是否有sessionId,如果没有,则创建一个符合HttpSession接口要求的对象(即session对象);
如果有sessionId,则依据该sessionId查找对应的session对象,如果找到了,则返回该对象,如果找不到,则创建一个新的session对象。(可能有一个月没去kfc,服务器把它的内存清空了,但它有确实曾被分配过id,所以就创建一个对象)

flag为false时:(允许为空对象,只返回有的对象)
先查看请求当中是否有sessionId,如果没有,返回null;
如果有sessionId,则依据该sessionId查找
对应的session对象,如果找到了,则返回该对象,如果找不到,返回null。

## (2)方式二

HttpSession s = request.getSession();
等价于 request.getSession(true);

# 3.常用方法
String  session.getId();//获得sessionId
session.setAttribute(String name,Object obj);//绑定数据  name绑定名   obj是绑定值
Object session.getAttribute(String name);//依据绑定名获得绑定值,若绑定值不存在,则返回null
session.removeAttribute(String name);//解除绑定

# 4.session超时

a.什么是session超时?
服务器会将空闲时间过长的session对象删除掉。
目的是为了节省内存空间。
b.缺省的超时时间,大部分服务器默认是30分钟。
c.可以修改超时时间长度。

比如,修改tomcat的web.xml文件

参看如下代码,通常不建议修改,但若修改的话,最好只是针对某一个具体的web应用

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

d.setMaxInactiveInterval(int seconds)

//两次请求的时间最大的时间间隔不能超过这个长度

设置两次请求之间的最大间隔时间,如果超过这个间隔时间,session对象会被删除。

# 5.删除session对象

session.invalidate();//无效的日期         要重新创建对象

# 6.session验证

##登录

用户填写用户名和密码并提交,服务器端依靠用户名和密码查询数据库,若有符合条件的记录,则登录成功,

返回一个欢迎页面;否则登录失败并给出提示。

step1.登录成功之后,在session对象上绑订相关数据。比如:

session.setAttribute("user",user);

//绑定session对象的名字和值

step2.当用户访问需要保护的资源(比如,访问用户列表),则进行session验证:

Object obj = session.getAttribute("user");
if(obj == null){
response.sendRedirect("login.jsp");
}

# 7.比较session和cookie

session相对于cookie,优点是存放更多的数据,
支持更丰富的数据类型,更安全;缺点是可能会占用过多的内存空间。


# 8.过滤器

## (1)过滤器是什么?

Servlet规范当中定义的一种特殊的组件,用来拦截Servlet容器的调用过程。
注:
当请求到达容器之后,如果有过滤器的话,容器会先调用过滤器。

## (2)如何写过滤器。
step1.写一个java类,实现Filter接口。
step2.在doFilter方法里面,编写相应的拦截处理逻辑。
step3.配置过滤器(web.xml)。

session(概念、session对象的获取、删除、验证)的更多相关文章

  1. session,cookie,sessionStorage,localStorage的相关设置以及获取删除

    一.cookie 什么是 Cookie? "cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScrip ...

  2. Struts2中获取Web元素request、session、application对象的四种方式

    我们在学习web编程的时候,一般都是通过requet.session.application(servletcontext)进行一系列相关的操作,request.session.和applicatio ...

  3. (25)Django中操作cookie与session组件(添加cookie和删除cookie)

    cookie是存在于客户端浏览器上的键值对,是明文的 cookie是当用户访问网站时候和数据提起携带过去,安全性比较差, 容易被拦截 session存在于服务端的键值对,是一串加密的字符串 当用户登陆 ...

  4. Laravel 5.1 中 Session 数据存储、访问、删除及一次性Session实例教程

    1.Session的由来及其实现 HTTP协议是无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的.也就是说我们无法在服务器端确认两次请求是否是同一个用户所为,这为我们在一些应用场景中实现 ...

  5. Django之Cookie Session详解,CBV,FBV登陆验证装饰器和自定义分页

    Cookie Session和自定义分页   cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接 ...

  6. Hibernate Session 4种对象状态

    站在持久化的角度.Hibernate把对象分为4中状态. 临时状态. 持久化状态.游离状态.删除状态. 1:Save()方法: //这个是验证:1:save方法使临时对象------>变成持久化 ...

  7. Webform:Session、Cookie对象的用法

    Session 优点:1.使用简单,不仅能传递简单数据类型,还能传递对象.  2.数据量大小是不限制的. 缺点:1.在Session变量存储大量的数据会消耗较多的服务器资源. 2.容易丢失. 使用方法 ...

  8. Struts2操作request、session和application对象

    Struts 2提供了多种方式来访问上述的三种对象,归结起来,可以划分为两大类:与Servlet API解耦的访问方式和与Servlet API耦合的访问方式. 与Servlet API解耦的访问方式 ...

  9. .net core中的Session以及HttpContext对象使用小结

    session用于识别用户并保持用户信息,就是一个会话 ,在浏览器不关闭的前提下,可以保存用户的信息,比如登录的保存用户信息从一个网页跳转到另一个网页,你的用户信息就可以用session. .net ...

随机推荐

  1. DES、RC4、AES等加密算法优势及应用

    [IT168 技术]1篇文章,1部小说被盗取,全靠维(si)权(bi)捍卫自己的原创权利.程序员捍卫自己珍贵的代码,全靠花式的加密算法.代码加密有多重要?程序员半年做出的产品,盗版者可能半天就能完全破 ...

  2. (转)Java大数操作(BigInteger、BigDecimal)

    基础知识 对于二进制来说,最高位代表正负号,-0表示-128,+0表示032位系统int型4个字节:-(2的31次方) ~ (2的31次方) 减 1最大负数:10000000 00000000 000 ...

  3. 论文阅读-使用隐马模型进行NER

    Named Entity Recognition in Biomedical Texts using an HMM Model  2004年,引用79 1.摘要 Although there exis ...

  4. itemscope itemtype="http://schema.org/AggregateRating"

    Review Canonical URL: http://schema.org/Review Thing > CreativeWork > Review A review of an it ...

  5. unity3d-游戏实战突出重围,第二天 制作血条

    using UnityEngine; using System.Collections; public class xt : MonoBehaviour { //红色血条 public Texture ...

  6. DateTime.Compare(t1,t2)比较两个日期大小

    DateTime.Compare(t1,t2)比较两个日期大小,排前面的小,排在后面的大,比如:2011-2-1就小于2012-3-2返回值小于零:  t1 小于 t2. 返回值等于零 : t1 等于 ...

  7. JAVA多线程常用例子

    详情见该页面ttps://www.cnblogs.com/pureEve/p/6524366.html

  8. 8.Thread的join方法

    1.Thread类的join方法表示:当前线程执行结束再执行其它线程!在Thread类中有三个重载的方法分别是: public final synchronized void join(long mi ...

  9. C# 调用.bat 提示该命令不是内部命令或外部命令

    前提:双击.bat文件可以执行成功,用C#调用提示该命令不是内部命令或外部命令...... 解决方法:下面代码的红色标注,既要设置.bat文件的文件名FileName,也要设置.bat文件所在的文件夹 ...

  10. pyinstaller将python脚本生成exe

    一.下载pyinstaller 二.生成exe 下载pyinstaller 1.在C:\python27\Scripts目录下打开cmd界面,执行命令:pip install PyInstaller ...