# 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. 如何给EOS账户设置自定义权限

    https://bihu.com/article/1508858 EOS从上线以后,不断有传出token被盗的消息,安全无小事,我们一定要重视,今天从EOS帐户自己定义权限的角度来谈谈如何做好账户的安 ...

  2. 万恶之源 - Python生成器

    生成器 首先我们来看看什么是个生成器,生成器本质就是迭代器 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 首先,我们先 ...

  3. 安装Cuda9.0+cudnn7.3.1+tensorflow-gpu1.13.1

    我的安装版本: win10 x64 VS2015 conda python 3.7 显卡 GTX 940mx Cuda 9.0 cudnn v7.3.1 Tensorflow-gpu 1.13.1 1 ...

  4. leetcode 108

    二分法建立二叉树,每次把左半部分作为左子树右半部分作为右子树,递归建立BST. #include<bits/stdc++.h> using namespace std; /** * Def ...

  5. How to compile and install Snort from source code on Ubuntu

    http://www.tuicool.com/articles/v6j2Ab Snort is by far the most popular open-source network intrusio ...

  6. vue中axios的封装

    第一步还是先下载axios cnpm install axios -S 第二步建立一个htttp.js import axios from 'axios'; import { Message } fr ...

  7. linux 下安装mysql-5.7.12-1.el6.x86_64.rpm-bundle.tar

    -rw-rw-r--. hadoop hadoop Nov : mysql--.el6.x86_64.rpm-bundle.tar tar -xvf mysql-5.7.12-1.el6.x86_64 ...

  8. PLSQL乱码

    PLSQL乱码 博客分类: oracle oracleplsql乱码  问题:PL/SQL插入和更新乱码. 解决乱码问题需要关注的三点: 1. Oracle数据库内部的字符集 2. Oracle客户端 ...

  9. 加快cin读取速度

    cin在读取大量数据时会比C里的scanf慢很多,但这并不是cin"无能",而是C++为了兼容C,对cin做了scanf的同步,只要关闭这个同步,cin就会有不弱于scanf的速度 ...

  10. Python datetime获取详细时间

    说明:datetime是date和time的结合体,包含了date和time的所有信息 datetime常见用法: 1.datetime.datetime.now()返回一个UTC时间的datetim ...