Cookie Session阐明

Cookie和Session是web开发中十分重要且容易被混淆的概念,总结记录如下。

1 什么是Session?

客户端与服务端交互通信的过程即是一次Session(会话)

2 Session何时创建?由谁创建?存储在哪里?

客户端与服务端成功连接后即开始创建;不同语言有不同创建Session的方法,具体到Java,tomcat通过调用HttpServletRequestgetSession方法进行session的创建工作;存储在服务端的内存中。

3 什么是sessionid?何时创建?存储在哪里?

session的key值,服务端可以根据sessionid获取session;在客户端与服务端第一次通信时,session创建时即被创建;创建之后,被传输到客户端,一般存储在cookie中。

4 为什么需要sessionid?

Http协议是无状态的,意思是断开链接之后它就不会再认识你了,除非你提供一个用户标识,所以sessionid出现了,客户端存储了sessionid之后,在下次访问服务器时会提交这个信息到服务端,服务端根据sessionid的值就能找到session,从而能够识别到你。

5 什么是cookie?

cookie是一些数据,以键值对形式存储,保存于电脑上的文本文件中,允许用户存储少量数据,空间只有4k,常常被用作用户账号密码的保存手段。

6 如何创建、删除、更新、查询cookie?

增加:

function addCookie(key, value, expires = 0) {
    var cookieStr = key + "=" + escape(value)
    if (expires > 0) {
        var date = new Date()
        date.setTime(date.getTime() + expires * 24 * 3600 * 1000)
        cookieStr = cookieStr + "; expires" + date.toGMTString();
    }
    document.cookie = cookieStr;
}

删除:

function deleteCookie(key) {
    var date = new Date();
    date.setTime(date.getTime() - 10000);
    document.cookie = key + "= over; expires=" + date.toGMTString();
}

**更新:**和增加一样

查询:

function getCookie(key) {
    var cookies = document.cookie.split("; ");
    var value = "";
    for (var i = 0; i < cookies.length; i++) {
        var arr = cookies[i].split("=")
        if (key == arr[0]) {
            value = unescape(arr[1])
            break
        }
    }
    return value
}

7 cookie与session什么关系?

session是服务端的概念,cookie是客户端的概念,本质上属于不同层次,只是在客户端识别上,session需要借助cookie保存sessionid,也仅此而已。

8 其余识别客户端的方法

url重写、input隐藏域等。

9 Java EE session登录校验流程

a. 第一次通信,tomcat生成session和sessionid,我们需要手动在session中保存用户登录状态,sessionid会被发送到客户端保存在cookie中;

b. 下一次通信,cookie中的sessionid被发送到服务端,tomcat即可解析出对应的session,这时我们手动get到的session即是解析成功的session,从而获取到其中的登录状态,用户即不需要重复登陆,反之如果session失效了,就需要跳转到登陆界面。

c. 登录校验过程往往在拦截器/过滤器实现。

如果在面试中被问到cookie和session的关系,我想主要回答以下几个方面:

  1. session是客户端与服务端交互通信的一种状态;
  2. 因为Http协议的无状态特性,所以为了使服务端能够识别客户端,需要sessionid唯一标识,从而能够使服务端通过sessionid获取session;
  3. cookie保存在客户端,在每次http请求均会发送到服务端;
  4. 因此可以使用cookie保存sessionid,这样每次http请求sessionid即被发送到服务端,服务端即可识别客户端了;
  5. session是服务端的概念,cookie是客户端的概念,本质上属于不同层次,只是在客户端识别上,session可以借助cookie保存sessionid,其它客户端识别方法还有url重写和input隐藏域等。

以上均本人理解,如有偏差,欢迎讨论。

你可能感兴趣的:(前端)