zoukankan      html  css  js  c++  java
  • cookie,session

    为什么使用session和cookie

    http是无状态协议,意味着如果后续处理需要前面的信息,则必须重传,这样那么每次传送的数据量会增大。为了解决大量重复信息内容的问题,cookie和session就登场了,它们可以保存用户的状态。

    cookie

    cookie通过客户端保持状态的解决方案。从定义上说,cookie就是服务器发送给客户端的特殊信息,而这些信息以文本的方式存放在客户端,然后客户端每次向服务器发送请求时都会带上这些特殊的信息。

    当用户浏览器访问一个支持cookie的网站时:

    1.用户提供包括用户名在内的个人信息提交至服务器。

    2.服务器在向客户端回传相应的超文本的同时,发回这些个人信息。放在http相应头中。

    3.当客户端浏览器收到来自服务器的响应后,浏览器会把这些信息放在一个统一的位置。

    4.之后客户端再向服务器发送请求时,会把相应的cookie再次返回服务器,而这次,cookie信息放在htt请求头中。

    简单解释一下这张表格:

    1、NAME=VALUE,键值对,cookie包括session都是以键值对的形式存储的

    2、Domain,指的是生成该Cookie的域名

    3、Path,指的是该Cookie是在哪个路径下生成的

    4、Expires / Max-Age,指的是该Cookie的过期时间/最大失效时间(即多少秒之后失效)

    5、Size,这个很明显,指的是占用的字节大小

    6、Secure,如果设置了这个属性,那么只会在SSH连接时才会回传该cookie

    有了cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头中的cookie信息得到来自客户端特有的信息,从而动态生成与客户端相对应的内容。

    session

    session是相对cookie的另一个解决方案,是通过服务器来保持状态的。session指的是服务器为客户端所开辟的存储空间,在其中保存的信息就是用于保存状态的。

    session是服务器端程序运行中创建的,不同语言实现的应用程序有不同创建session的方法,在创建session的同时,会生成一个唯一的sessionId,而这个sessionId被创建后,可以调用session相关的方法往session中增加内容。而这些信息只保存在服务器中,

    发送给客户端只有sessionId。客户端再次发送请求时会把sessionId带上,服务器收到请求后会根据sessionId找到对应的session,从而保持状态。

    sessionId存放有两种方式:

    1.通过url存取,url会带上一个sessionId=xxx,这样每次请求都穿了sessionId给服务器。

    2.通过cookie存取(tomcat默认),这种cookie是session cookie,是区别我们常用的cookie(常用的cookie也叫作persistent cookie),session cookie是存储在浏览器内存中(至于浏览器内存在哪,这个与浏览器相关,比如360浏览器,就这360se6User DataDefault路径下)而不是在

    硬盘。程序一开始执行,服务器就生成一个sessionId并通过cookie携带到客户端的缓存中,下次访问时,服务器会先检测一下是否有这个cookie,如果有就叫取它的id,如果没有就再生成一个。这就是为什么浏览器关闭后,再进去session没有了,其实在服务器session没有清空,只是传过去没有sessionId,浏览器为这次会话生成了新的sessionId和session,不是原来的session了。服务器保存的session数据不是立即释放的,此时数据还会存在,只要我们知道那个sessionId,就可以访问到原来的session。服务端自动对session进行管理,如果在规定的时间内没有访问,就会释放掉session。

    还有:

    1.sessionId通常是看不见的,但是当我们把浏览器cookie禁止之后,web服务器会采用url重写的方式传递sessionId,这样就可以在地址栏看到了。

    2.session cookie不可以跨窗口使用。

    session和cookie

    单独使用cookie和session都是不安全的

    cookie缺点:

    1.使用cookie来传递信息,随着cookie个数的增多和访问量的增加,它占用的网络宽带也很大。

    2.cookie不安全,因为cookie是放在客户端的,所有可以通过插件修改cookie。所以从这个角度说该用session,session是将数据保存在服务端,只是传递一个sessionId而已,session更适合存储用户隐私和重要数据。

    session缺点:

    1.不容易在多台服务器共享(致命弱点)。

    2.session太多会消耗服务器性能。

  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
  • 原文地址:https://www.cnblogs.com/tp123/p/6425606.html
Copyright © 2011-2022 走看看