会话技术 之 cookie _ session

会话技术 之 cookie _ session

1.什么是会话 ?

答 : 指用户开启浏览器,访问一个网站,只要不关闭浏览器 , 不管客户开了多少链接,访问多少资源,直到用户关闭浏览器, 这整个流程就称为一次会话.

2.为什么我们要使用会话技术?

why? 会话跟踪技术,主要是可以帮我解决很多小问题 , 像有时候 ,在访问一些网站的时候 ,会弹出是否要记住密码 , 这样下次就可以自动登录了.

会话跟踪技术有 cookie , session.

接下来 , 我就带你们走进 它们的世界 . .

首先 我们应该知道 , 网页之间的交互是通过 HTTP协议传输数据的, 但是呢 , HTTP是无状态协议 .

啥是无状态协议 ? ? ? --->>>答 : 就是 一旦数据提交完后 , 浏览器和服务器的连接就会关闭 , 再次交互的时候需要重新建立连接.

这样的话 , 服务器就无法确认用户的信息 ,于是呢 , w3c就提出了 : 给每一个用户都发一个通行证,无论谁访问的时候都需要携带通行证,这样服务器就可以从通行证上确认用户的信息。通行证就是Cookie.

3.Cookie流程

Cookie 的 流程 :

浏览器访问服务器,如果服务器需要记录该用户的状态, 就是使用response向浏览器发送一个Cookie,浏览器就会把Cookie保存起来.当浏览器再次访问服务器的时候 ,浏览器会把请求的网址连同Cookie一起交给服务器 .

cookie.jpg

Cookie :

1.概念 : 客户端会话技术 , 将数据保存到客户端 .

2.Cookie的基本使用:

简单三步骤 : 1.创建Cookie对象 ; 2.发送Cookie ; 3.获取浏览器带过来的Cookie.

cookie 基本使用 :

1&2:
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理请求编码
        req.setCharacterEncoding("utf-8");
        //获取请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //2.模拟和数据中的账号信息是否一致
        if("admin".equals(username)&&"1".equals(password)){

            //存放到cookie 中
            //1. 创建 Cookie 2.发送coolkie
            Cookie c = new Cookie("username", username);
            resp.addCookie(c);
            req.getRequestDispatcher("/WEB-INF/view/index.jsp").forward(req,resp);
            return;
        }else{
            System.out.println("登陆失败!");
        }
    }
3.1 从Cookie中获取数据(servlet中)
    Cookie cs[]=req.getCookies();
    for(Cookie c:cs){
        if("username".equals(c.getName())){
            username=c.getValue();
        }
    }
3.2 从Cookie中获取数据(jsp中)
    EL内置对象 : 
    ${cookie.username.value}

4.Cookie 细节使用

4.1 修改Cookie中的数据

为Cookie重新设置数据(2方式):

1.调用cookie的 setValue()方法覆盖原来的数据;

2.创建一个name一样的Cookie对象

这里要注意 : 修改后 要 resp.addCookie(新的cookie对象)

4.2设置cookie的存活时间

注: 默认情况下 , cookie是属于会话cookie , 即浏览器关闭则失效 , 无法使用 .

要设置存活时间 :

创建cookie后 , 就设置存活时间

api: Cookie对象的 setMaxAge(int expiry)

expiry>0 例 expiry(60) 即 60秒

=0 则是 立即删除Cookie对象

<0 则是会话关闭 , Cookie对象销毁

4.3 Cookie中文问题

Tomcat 8.5 以上自动处理了这个问题 , 所以无需手动解决了 .

不是 Tomcat 8.5 以上的 , 百度下即可 .

4.4 Cookie的特点和作用

特点:

1. cookie存储数据在客户端浏览器

2. 浏览器对于单个cookie 的大小有限制(4 k b ) 以及 对同一个域名下的总cookie数量也有限制(20个)

作用:

1. cookie一般用于存出少量的不太敏感的数据

2.在不登录的情况下,完成服务器对客户端的身份识别

5.session

  1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中.

  2. 快速入门:

    2.1. 获取HttpSession对象:

    HttpSession session = request.getSession();

    2.2.使用HttpSession对象:

    Object getAttribute(String name) ---(String 强转 今天用到的)

    void setAttribute(String name, Object value)

    void removeAttribute(String name)

session.jpg
@WebServlet("/session/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理请求编码
        req.setCharacterEncoding("utf-8");
        //获取请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //2.模拟和数据中的账号信息是否一致
        if("admin".equals(username)&&"1".equals(password)){
            req.getSession().setAttribute("USER_IN_USERNAME",username);//------看这里------
            req.getRequestDispatcher("/WEB-INF/view/index.jsp").forward(req,resp);
            return;
        }else{
            System.out.println("登陆失败!");
            req.getRequestDispatcher("/WEB-INF/view/login.jsp").forward(req,resp);
        }
    }
}
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>邮件列表页</title>
</head>
<body>  <!--看这里********看这里*******看这里**************看这里**************************-->
欢迎 : ${USER_IN_USERNAME} 先生/女士<br>
<c:forEach items="${list}" var="email">
    <a href="/session/content">${email}</a><br>    
</c:forEach>
</body>
</html>

3.原理 : Session的实现是依赖于Cookie的。

  1. 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?

​ 默认情况下。不是。

​ 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。

​ Cookie c = new Cookie("JSESSIONID",session.getId());

​ c.setMaxAge(60*60);

​ response.addCookie(c);

  1. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?

​ 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作

​ session的钝化:

​ 在服务器正常关闭之前,将session对象系列化到硬盘上

​ session的活化:

​ 在服务器启动后,将session文件转化为内存中的session对象即可。

  1. session什么时候被销毁?

4.1.服务器关闭

4.2. session对象调用invalidate() 。

​4.3. session默认失效时间 30分钟

​4.4选择性配置修改

​<session-config>

​<session-timeout>30</session-timeout>

​</session-config>

  1. session的特点

    1. session用于存储一次会话的多次请求的数据,存在服务器端

    2. session可以存储任意类型,任意大小的数据

session与Cookie的区别:

​ 1. session存储数据在服务器端,Cookie在客户端

​ 2. session没有数据大小限制,Cookie有

​ 3. session数据安全,Cookie相对于不安全

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354