有关cookie

1.session机制采用的是在服务器端保持状态的方案,而cookie机制则是在客户端保持状态的方案,cookie又叫会话跟踪机制。打开一次浏览器到关闭浏览器算是一次会话。
HTTP协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。此时,服务器无法从链接上跟踪会话。cookie可以跟踪会话,弥补HTTP无状态协议的不足。

2.cookie的分类:
cookie分为会话cookie和持久cookie,会话cookie是指在不设定它的生命周期expires时的状态,前面说了,浏览器的开启到关闭就是一次会话,当关闭浏览器时,会话cookie就会跟随浏览器而销毁。当关闭一个页面时,不影响会话cookie的销毁。会话cookie就像我们没有办理积分卡时,单一的买卖过程,离开之后,信息则销毁。
持久cookie则是设定了它的生命周期expires,此时,cookie像商品一样,有个保质期,关闭浏览器之后,它不会销毁,直到设定的过期时间。对于持久cookie,可以在同一个浏览器中传递数据,比如,你在打开一个淘宝页面登陆后,你在点开一个商品页面,依然是登录状态,即便你关闭了浏览器,再次开启浏览器,依然会是登录状态。这就是因为cookie自动将数据传送到服务器端,在反馈回来的结果。持久cookie就像是我们办理了一张积分卡,即便离开,信息一直保留,直到时间到期,信息销毁。

缺点:
(1)cookie可能被禁用。当用户非常注重个人隐私保护时,他很可能禁用浏览器的cookie功能;
(2)cookie是与浏览器相关的。6这意味着即使访问的是同一个页面,不同浏览器之间所保存的cookie也是不能互相访问的;
(3)cookie可能被删除。因为每个cookie都是硬盘上的一个文件,因此很有可能被用户删除;
(4)cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。

用法:
设置cookie
每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:

document.cookie="userId=828";
如果要一次存储多个名/值对,可以使用分号加空格(; )隔开,例如:

document.cookie="userId=828; userName=hulk";
给cookie设置终止日期:
到现在为止,所有的cookie都是单会话cookie,即浏览器关闭后这些cookie将会丢失,事实上这些cookie仅仅是存储在内存中,而没有建立相应的硬盘文件。
在实际开发中,cookie常常需要长期保存,例如保存用户登录的状态。这可以用下面的选项来实现:
document.cookie="userId=828; expiress=GMT_String";
到现在为止,所有的cookie都是单会话cookie,即浏览器关闭后这些cookie将会丢失,事实上这些cookie仅仅是存储在内存中,而没有建立相应的硬盘文件。
在实际开发中,cookie常常需要长期保存,例如保存用户登录的状态。这可以用下面的选项来实现:
document.cookie="userId=828; expiress=GMT_String";
其中GMT_String是以GMT格式表示的时间字符串,这条语句就是将userId这个cookie设置为GMT_String表示的过期时间,超过这个时间,cookie将消失,不可访问。例如:如果要将cookie设置为10天后过期,可以这样实现:

<script language="JavaScript" type="text/javascript">
<!--
//获取当前时间
var date=new Date();
var expiresDays=10;
//将date设置为10天以后的时间
date.setTime(date.getTime()+expiresDays*24*3600*1000);
//将userId和userName两个cookie设置为10天后过期
document.cookie="userId=828; userName=hulk; expires="+date.toGMTString();
//-->
</script>


cookie和session区别:
cookie :给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理 。Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说 Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么 Session机制 就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
cookie和session的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
使用  Cookie  的优点为:
l           可配置到期规则  Cookie  可以在浏览器会话结束时到期,或者可以在客户端计算机上无限期存在,这取决于客户端的到期规则。
l           不需要任何服务器资源  Cookie  存储在客户端并在发送后由服务器读取。
l           简单性  Cookie  是一种基于文本的轻量结构,包含简单的键值对。
l           数据持久性   虽然客户端计算机上  Cookie  的持续时间取决于客户端上的  Cookie  过期处理和用户干预, Cookie  通常是客户端上持续时间最长的数据保留形式。
使用  Cookie  的缺点为:
l           大小受到限制   大多数浏览器对  Cookie  的大小有  4096  字节的限制,尽管在当今新的浏览器和客户端设备版本中,支持  8192  字节的  Cookie  大小已愈发常见。
l           用户配置为禁用   有些用户禁用了浏览器或客户端设备接收  Cookie  的能力,因此限制了这一功能。
l           潜在的安全风险  Cookie  可能会被篡改。用户可能会操纵其计算机上的  Cookie ,这意味着会对安全性造成潜在风险或者导致依赖于  Cookie  的应用程序失败。另外,虽然  Cookie  只能被将它们发送到客户端的域访问,历史上黑客已经发现从用户计算机上的其他域访问  Cookie  的方法。您可以手动加密和解密  Cookie ,但这需要额外的编码,并且因为加密和解密需要耗费一定的时间而影响应用程序的性能。
注意: Cookie  通常用于为已知用户自定义内容的个性化情况。在大多数此类情况中, Cookie  是作为 标识 而不是 身份验证 。因此,通常保护用于标识的  Cookie  的方法是在  Cookie  中存储用户名、帐户名或唯一用户  ID (例如  GUID ),然后用以访问站点的用户个性化结构中的信息。
session详解
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。 

    而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示,如果某家分店还发行了自己的会员卡,那么进这家店的时候除了要出示麦当劳的会员卡,还要出示这家店的会员卡。 

     cookie的内容主要包括:名字,值,过期时间(MaxAge/expires),路径和域(domain)。  安全标志:secure 指定后,cookie只有在ssl连接的时候才能发送到服务器
理解session机制  

    session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 

    当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。 


1,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
  由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面, 附加方式也有两种,一种是作为URL路径的附加信息, 表现形式为http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 
另一种是 作为查询字符串附加在URL后面, 表现形式为http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 
这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。 
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。 
2,session 可以放在 文件、数据库、或内存中都可以。
3,用户验证这种场合一般会用 session

因此,维持一个会话的核心就是客户端的唯一标识,即 session id

(前端小白,如有错误,欢迎指正~~)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML 中没有与 cookie 直接相关的函数,但是可以使用 JavaScript 来操作 cookie。以下是一些与 cookie 相关的 JavaScript 函数: 1. `document.cookie`:获取或设置当前文档的 cookie。 2. `encodeURIComponent(string)`:将字符串编码为 URI 组件。在设置 cookie 值时,需要对字符串进行编码,以便在 cookie 中存储特殊字符。 3. `decodeURIComponent(string)`:将 URI 组件解码为字符串。在获取 cookie 值时,需要对字符串进行解码,以便得到原始字符串。 4. `Date.toUTCString()`:将日期对象转换为 UTC 时间字符串。在设置 cookie 的过期时间时,需要将日期对象转换为 UTC 时间字符串。 5. `new Date(milliseconds)`:根据指定的毫秒数创建一个日期对象。在设置 cookie 的过期时间时,需要创建一个日期对象,并根据需要添加指定的毫秒数。 使用这些函数,可以通过 JavaScript 在 HTML 页面中操作 cookie。例如,以下代码演示了如何设置一个名为 `myCookie` 的 cookie,其值为 `hello world`,过期时间为 7 天: ``` var now = new Date(); var expires = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000); document.cookie = "myCookie=" + encodeURIComponent("hello world") + "; expires=" + expires.toUTCString() + "; path=/"; ``` 要获取名为 `myCookie` 的 cookie 的值,可以使用以下代码: ``` var cookies = decodeURIComponent(document.cookie).split("; "); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i].split("="); if (cookie[0] == "myCookie") { var value = cookie[1]; break; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值