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太多会消耗服务器性能。

  • 相关阅读:
    MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)
    PhpExcel导出excel报错:net::ERR_INVALID_RESPONSE
    Java收藏
    Java项目收藏
    CentOS 6.8 安装 Erlang 及 RabbitMQ Server
    Redis 中 5 种数据结构的使用场景介绍
    Golang 实现 set 集合,变相实现 切片去重、排序 功能
    查看 Mac/Linux 某端口占用情况
    [Beego模型] 六、事务处理
    [Beego模型] 五、构造查询
  • 原文地址:https://www.cnblogs.com/tp123/p/6425606.html
Copyright © 2011-2022 走看看