zoukankan      html  css  js  c++  java
  • SESSION COOKIE

    SESSION COOKIE

    COOKIE机制

    Cookie机制

    Cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。 IETF RFC 2965 HTTP状态管理机制是一种通用的cookie规范。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同一服务器的任何请求绑定到这些cookie。

    具体来说,cookie机制使用一种在客户端维护状态的方案。它是客户端会话状态的存储机制,他需要用户打开客户端的cookie支持。 Cookie的作用是解决HTTP协议中缺少无状态缺陷的问题。

    通过扩展HTTP协议来实现正统cookie分发。服务器通过向HTTP响应头添加特殊指示来提示浏览器生成相应的cookie。但是,纯JavaScript等客户端脚本也可以生成cookie。根据某些原则,浏览器在后台自动将cookie的使用发送到服务器。浏览器检查所有存储的cookie。如果cookie声明范围大于或等于要请求的资源的位置,则cookie将附加到请求资源的HTTP请求标头并发送到服务器。

    cookie的内容主要包括:名称,值,到期时间,路径和域。路径与域一起构成了cookie的范围。如果未设置到期时间,则表示此cookie的生命周期是在浏览器会话期间,浏览器窗口关闭,并且cookie消失。生命周期为浏览器会话的cookie称为会话cookie。会话cookie通常不存储在硬盘上,而是存储在内存中。当然,这种行为不受监管。如果设置了到期时间,浏览器会将cookie保存到硬盘,关闭它并再次打开浏览器。在超过设定的到期时间之前,这些cookie仍然有效。存储在硬盘上的Cookie可以在不同的浏览器进程之间共享,例如两个IE窗口。不同的浏览器对存储在内存中的cookie有不同的处理方法。会话机制使用维护服务器端状态的解决方案。同时,我们也看到,由于服务器端状态保存方案还需要在客户端保存标识符,会话机制可能需要使用cookie机制来达到保存标识符的目的。会话提供了一种管理全局变量的便捷方法。

    该会话适用于每个用户。变量的值存储在服务器上。 sessionID用于区分使用哪个用户会话变量。当用户访问浏览器时,该值将返回给服务器。当客户端禁用cookie时,此值也可以设置为通过get返回给服务器。

    在安全性方面:当您访问使用会话并在您自己的计算机上创建cookie的站点时,建议服务器端的会话机制更安全,因为它不会任意读取客户端存储的信息。

    SESSION会话机制

    session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息。

    当程序需要为客户端的请求创建会话时,服务器首先检查客户端的请求是否包含会话标识符(称为会话ID)。如果包含它,它先前已为此客户端创建了一个会话。服务器根据会话ID检索会话(无法检索,将创建新会话),如果客户端请求不包含会话ID,则为客户端创建会话并生成与会话关联的会话ID。 session id应该是一个既不重复也不容易被复制的字符串。会话ID将返回给客户端以保存此响应。

    保存此会话ID的方法可以是cookie,以便浏览器可以根据交互期间的规则自动将此标志用于服务器。通常,此cookie的名称与SEEESIONID类似。但是,cookie可以被人为禁止,因此必须有其他机制在禁用cookie时将会话ID传递回服务器。经常使用的一种技术称为URL重写,它只是将会话ID直接附加到URL路径。还有一种称为形式隐藏字段的技术。也就是说,服务器将自动修改表单并添加隐藏字段,以便在提交表单时将会话ID传递回服务器。

    Cookie和Sessions都能够进行会话跟踪,但原则并不相同。一般情况下,两者都可以满足需求,但有时候他们不能使用cookies,有时候不能使用Session。以下是两者和适用场所的特征比较。

    1.不同的访问方法

    只有ASCII字符串可以存储在cookie中。如果需要访问Unicode字符或二进制数据,则需要先对其进行编码。无法在cookie中直接访问Java对象。要存储稍微复杂的信息,使用cookie会更难。

    会话可以访问任何类型的数据,包括但不限于字符串、Integer、List、Map等。 Session也可以直接存储Java Beans甚至任何Java类,对象等,使用起来非常方便。将Session视为Java容器类。

    2.不同的隐私政策

    Cookie存储在客户端阅读器中,对客户端可见。客户端上的某些程序可能会窥探、副本以更正cookie的内容。会话存储在服务器上,对客户端是透明的。不存在敏感信息泄露的风险。

    如果您选择cookie,最好不要写敏感信息,如帐户密码。最好加密像Google、Baidu这样的cookie信息,并将其提交给服务器进行解密,以确保我自己可以读取cookie中的信息。如果选择Session,则可以省去很多麻烦。无论如何,它被放置在服务器上,并且会话中的任何隐私都可以得到有效保护。

    3.有效期的差异

    使用Google的任何人都知道,如果您已登录Google,Google的登录信息将长期有效。用户每次访问时都不必再次登录,Google会永久记录用户的登录信息。要达到这个效果,使用cookies将是一个不错的选择。只需将cookie的到期时间属性设置为一个非常大的数字。由于Session依赖于名为JSESSIONID的cookie,并且Cookie JSESSIONID的到期时间默认为-1,因此只需关闭阅读器就会使Session无效,Session将无法永久完成信息。无法使用URL地址重写。此外,如果设置Session的超时时间太长,服务器将累积的Sessions越多,导致内存溢出的可能性就越大。

    4.不同的服务器压力

    会话保留在服务器端,每个用户都将生成一个会话。如果有很多并发用户,它会产生大量的Session并消耗大量内存。因此,具有高并发流量的站点(如Google、Baidu、Sina)不太可能使用Session来跟踪客户会话。

    Cookie保留在客户端上,不消耗服务器资源。如果有很多用户同时阅读,那么cookie是一个不错的选择。关于Google、Baidu、Sina,cookies可能是唯一的选择。

    5.不同的浏览器支持

    客户端浏览器需要支持Cookie。如果客户端禁用cookie或不支持cookie,则会话跟踪将无效。关于WAP上的应用程序,常规cookie无用。

    如果客户端浏览器不支持cookie,则需要使用会话和URL地址重写。应该注意的是,Session程序中使用的所有URL都必须重写URL地址,否则会话会话跟踪将无效。对于WAP应用程序,会话+ URL地址重写可能是唯一的选择。

    如果客户端支持cookie,则可以在浏览器窗口和子窗口中将cookie设置为有效(将到期时间设置为-1),或者可以将cookie设置为在所有阅读器窗口中有效(设置到期时间)大于1)0的整数。但是,Session只能在此阅读器窗口及其子窗口中使用。如果两个浏览器窗口彼此不相关,则它们将使用两个不同的会话。 (与IE8下不同窗口相关的会话)

    6.跨域支持的差异Cookie支持跨域访问。例如,如果domain属性设置为“.biaodianfu.com”,则所有以“.biaodianfu.com”为后缀的域名都可以访问cookie。跨域cookie现在通常在网络上使用,例如Google、Baidu、Sina。会话不支持跨域访问。会话仅在其所在的域名内有效。

    仅使用cookie或仅使用Sessions可能无法达到预期的效果。此时,您应该尝试使用Cookie和会话。 Cookie和Sessions的组合将在练习项目中实现许多意想不到的结果。

    我的理解:

    1.由于HTTP协议是无状态协议,当服务器需要记录用户的状态时,需要一些机制来识别特定用户。这个机制是Session。点击下订单时,购物车等典型场景使用按钮时,由于HTTP协议是无状态的,因此不知道哪个用户在运行。因此,服务器需要为特定用户创建特定会话,该会话用于识别用户并跟踪用户,以便知道购物车。有几本书。此会话存储在服务器上,并具有唯一标识符。有很多方法可以在服务器端保存会话,内存、数据库、文件有它。在群集中,您还应该考虑转移会话。在大型网站上,将有一个特殊的会话服务器群集来保存用户会话。此时,会话信息存储在内存中,并使用一些缓存服务,如Memcached。来吧,把会议。2.考虑服务器如何识别特定客户?此时,cookie已出现在场景中。每次发出HTTP请求时,客户端都会将相应的cookie信息发送到服务器。事实上,大多数应用程序使用cookie来实现会话跟踪。在第一次创建会话时,服务器将告诉HTTP协议中的客户端需要在cookie中记录会话ID。会话ID被发送到服务器,我知道你是谁。有人问,如果客户端的浏览器禁用了cookie,该怎么办?在这种情况下,称为URL重写的技术用于会话跟踪。也就是说,每个HTTP交互,诸如sid = xxxxx之类的URL被附加到URL,并且服务器相应地识别用户。

    3. Cookie也可用于某些用户友好的场景。想象一下,您已经登录过一次网站。下次登录时,您不想再次输入帐户。我该怎么办?此信息可以写入cookie。访问网站时,网站页面的脚本可以读取此信息,并自动为您填写用户名,方便用户使用。这也是cookie名称的起源,给用户一点点甜蜜。

    所以,总结一下:

    Session是保存在服务器上的数据结构,用于跟踪用户的状态。此数据可以保存在群集、数据库、文件中。

    Cookie是客户端存储用户信息的机制。它用于记录有关用户的一些信息,是实现会话的一种方式。

    1.状态保持

    http协议是无状态的:每个请求都是一个新请求,并且不会记住先前通信的状态。

    客户端和服务器之间的一次通信是会话实现状态保留的方法:在客户端或服务器端存储与会话相关的数据存储方法包括cookie、session,会话通常是指会话对象。使用cookie,所有数据都存储在客户端上,注意不要存储敏感信息建议使用sesison模式,所有数据都存储在服务器端,session_id存储在客户端cookie中。状态保持的目的是在一段时间内跟踪请求者的状态,并实现对当前请求者的数据的跨页访问。注意:不同请求者之间不会共享此数据,与请求者一一对应

    2.Session会话(示例Django)·默认情况下启用使用django-admin startproject创建的项目

    ·在settings.py文件中

    在INSTALLED_APPS列表中添加:

    'django.contrib.sessions',

    在MIDDLEWARE_CLASSES列表中添加:

    'django.contrib.sessions.middleware.SessionMiddleware',

    ·禁用会话:删除上面指定的两个值,禁用会话将保存一些性能

    3.使用session

    ·启用会话后,每个HttpRequest对象都将具有会话属性,该属性是类字典对象

    Get(key,default = None):根据密钥获取会话的值

    Request.session.get(“UNAME”,””)

    ·clear():清除所有会话

    Flus():删除当前会话数据并删除会话的cookie

    Del request.session ['uname']:删除会话

    4.session到期时间

    Set_expiry(value):设置会话的超时时间

    ·如果未指定,则在两周后过期

    ·如果value是整数,则会话值将在值秒内没有活动后到期

    ·如果值是timedelta对象,则会话将在当前时间加上指定的日期/时间到期

    ·如果value为0,则用户会话的cookie将在用户的浏览器关闭时到期

    ·如果value为None,则会话永不过期

    COOKIE和SESSION的区别

    1、Cookie是存在客户端,Session存在服务器

    2、安全性要求高的用Session,要求低用Cookie

    3、Cookie只能存储字符串,Session可以存储任何信息

    4、Cookie如果不设置时间,当关闭浏览器时,Cookie就失效,不会在本地保存;Session的生命周期是一个会话(当启动浏览器到关闭浏览器)

    5、在存储相对持久的信息时,应考虑使用 Cookie,因为 Cookie 可以以文件的形式,存储在客户端。在进行一些登录的验证及信息拦截的时候,可以使用 Session。

    引用:

    https://blog.csdn.net/weixin_42808295/article/details/81290306

    https://www.cnblogs.com/shoshana-kong/p/10669889.html

  • 相关阅读:
    085 Maximal Rectangle 最大矩形
    084 Largest Rectangle in Histogram 柱状图中最大的矩形
    083 Remove Duplicates from Sorted List 有序链表中删除重复的结点
    082 Remove Duplicates from Sorted List II 有序的链表删除重复的结点 II
    081 Search in Rotated Sorted Array II 搜索旋转排序数组 ||
    080 Remove Duplicates from Sorted Array II 从排序阵列中删除重复 II
    079 Word Search 单词搜索
    078 Subsets 子集
    bzoj2326: [HNOI2011]数学作业
    bzoj2152: 聪聪可可
  • 原文地址:https://www.cnblogs.com/kkxxmyt/p/11045643.html
Copyright © 2011-2022 走看看