Session会话在追踪过程中发生什么?

发布于:2023-01-04 ⋅ 阅读:(273) ⋅ 点赞:(0)

目录

一:cookie是什么?

二:cookie有什么作用?

三:cookie的表示

 四:cookie的常见的方法有哪些?

五:什么是session?

六:session的常见的方法有哪些?

七:session请求过程中到底发生什么?


在学习Session会话过程中我们得先知道两个关键字就是sessioncookie

一:cookie是什么?

cookie在中文翻译的意思是曲奇的意思,其实cookie就是一些数据信息,类型为”小型文本文件“,存储于电脑上的文本文件中,在客户端保持 HTTP 状态信息的方案,当浏览器访问WEB服务器的某个资源时,WEB服务器会在HTTP响应头中添加一个键值对传送给浏览器,再由浏览器将该cookie放到客户端磁盘的一个文件中,该文件可理解为cookie域(键值对的集合),往后每次访问某个网站时,都会在请求头中带着这个网站的所有cookie值,这就是下面的答案。

二:cookie有什么作用?

大家不妨想一想,就是大伙在第一次登录一个网站或者第一次访问一个网站时候再或者是在一个网站搜索一个动西时候,当你第二次过来访问时候你上次搜索的东西或者登录的网站会有你上次搜索的东西,这是怎么做到的呢?其实这就是浏览器保存了我们的cookie,前提是服务器创建了才会有会有cookie,我们一csd来看

 

三:cookie的表示

大家也看到了上面的图片了,都是name和value,所以一般情况下cookie都是一键值队 的形式存在的,例如后边我们会提到一个标识就是JessionID,name就是它,对应的value就是一串id就是用来标记你这个用户的 ,我自己写了一个给cookie复制的代码大家可以参考一下

测试代码为

package com.spesource.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/textcookie.do")
public class TextCookie  extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	System.out.println("cookie");
    	//创建cookie
    	Cookie cookie1=new Cookie("phone_number","5555555555");
    	Cookie cookie2=new Cookie("Emile","jhqjdhqh");
    	Cookie cookie3=new Cookie("password","ardqwd6565");
        //设置cookie最长生存时间
    	cookie1.setMaxAge(7*24*60*60);//默认单位是秒
    	cookie2.setMaxAge(7*24*60*60);//默认单位是秒
    	cookie3.setMaxAge(7*24*60*60);//默认单位是秒
    	
    	//用响应带着cookie返回回去(cookie是在响应头里边被带回去的)
    	resp.addCookie(cookie1);
    	resp.addCookie(cookie2);
    	resp.addCookie(cookie3);
    }
}

 四:cookie的常见的方法有哪些?

•new Cookie (String name, String value):创建—个Cookie对家,必须传入cookie的名字和cookie的值
getValue(): 得到cookie保存的值
getName():获取cookie的名字
setMaxAge(int expiry):设置cookie的有效期,默认为-1。这个如果设置负数,表示客服端关闭,cookie就会删除。0表示马上删除。正数表示有效时间,单位是秒。
• setPath(String uri):设置cookie的作用域


HttpServletRequest和HttpServletResponse对Cookie进行操作的常见后法
•response.addCookie(Cookie cookie):将cookie给客户端进行保存
•resquest.getCookies(:得到客服端传过来的所有cookie对象

五:什么是session?

session机制是在服务器保持HTTP状态信息的方案,web服务器在一个时间段会有很多请求,那么服务器是怎么来区分或者是怎么知道谁是谁的,所以为了加速session实现和读取,在session第一次创建的时候服务器就会开启一块内存来专门保存服务器所有的session.当请求过来的时候服务器就会分配一个session ID,通过响应的带回去,当这个请求再一次过来的时候会带着这个id(在cookie中)继续访问。

六:session的常见的方法有哪些?

1. getld()方法:得到sessionid。
2. invalidate(方法:让session立刻失效
3. getAttribute(String key):根据key获取该session中的value。
4. setAttribute (String key, Object value):往session中存放key-value。
5. remoreAttribute (Stringkey):根据key州除session中的key-value。
6. getServletContext0:得到ServletContext.
7. setMaxlnactivelnterval(long timeoutygetMaxInactivelnterval:设置/获取session的最大有效时间。
8. getCreation Time方法:获取session的创建的时间。
9. getLastAccessedTime方法:获取session最后一次访问的时间。
10. getSession0:从HttpServletRequest中获取session。

七:session请求过程中到底发生什么?

在说之前我们得先知道请求大概分三步

1:客户端发送请求给服务器

2:服务器处理该请求

3:服务器将给请求的处理结果响应给客户端

所以详细过程是:

当用户发送一个请求到服务器端时,服务器会先检查请求中是否含有sessionid(在cookie中),

如果不存在sessionid(说明是第一次请求)就会为该请求用户创建—个session对象,并将该session对象的sessionid(放到响应头的set-cookie中,格式set-cookie: sessionid,下次再请求时cookie中就会有一个name为jsessionid的cookie, value就是sessionid)响应给客户端。
如果存在sessionid,就会在服务器端查找是否有该sessionid对应的session 如果有就使用.没有就创建
所以说,服务器端的session和客户端的cookie是息息相关的,若是没有了cookie.又不做其他处理的话,服务器端的session也没了,session是靠cookie来实现的

下面是简单的代码实现

package com.spesource.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/cookie.do")
public class TextSession extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("GET请求:TextCookie被请求到了哦");
		HttpSession session = req.getSession();
		System.out.println("这是sessionid" + session.getId());
	}
}

结果是

 

 

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到