简述 Cookie和Session







具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

Cookie的优缺点:

优点:极高的扩展性和可用性
通过良好的编程,控制保存在cookie中的session对象的大小。
通过加密和安全传输技术(SSL),减少cookie被破解的可能性。
只在cookie中存放不敏感数据,即使被盗也不会有重大损失。
控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。
缺点:
Cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。
安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。
有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

Session的优缺点:
优点

如果要在诸多Web页间传递一个变量,那么用Session变量要比通过QueryString传递变量可使问题简化。

要使WEb站点具有用户化,可以考虑使用Session变量。你的站点的每位访问者都有用户化的经验,基于此,随着LDAP和诸如MS Site 

Server等的使用,已不必再将所有用户化过程置入Session变量了,而这个用户化是取决于用户喜好的。

你可以在任何想要使用的时候直接使用session变量,而不必事先声明它,这种方式接近于在VB中变量的使用。使用完毕后,也不必考虑将其释放,因为它将自动释放。

缺点

Session变量和cookies是同一类型的。如果某用户将浏览器设置为不兼容任何cookie,那么该用户就无法使用这个Session变量!

当一个用户访问某页面时,每个Session变量的运行环境便自动生成,这些Session变量可在用户离开该页面后仍保留20分钟!(事实上,这些变量一直可保留至“timeout”。“timeout”的时间长短由Web服务器管理员设定。一些站点上的变量仅维持了3分钟,一些则为10分钟,还有一些则保留至默认值20分钟。)所以,如果在Session中置入了较大的对象(如ADO 

recordsets,connections, 等等),那就有麻烦了!随着站点访问量的增大,服务器将会因此而无法正常运行!

因为创建Session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用session变量将会导致代码不可读而且不好维护。

虽然“你可以在任何想要使用的时候直接使用session变量,而不必事先声明它,这种方式接近于在VB中变量的使用。使用完毕后,也不必考虑将其释放,因为它将自动释放”。但是,“谁”想到那儿呢?变量的含义是什么?这些都变得不很清晰。

















Js操作Cookie总结(设置,读取,删除),工作中经常会用到的哦!下面是详细代码,如有错误,请留言指正!
id="iframeu2261530_0" src="http://pos.baidu.com/fccm?sz=680x200&rdid=2261530&dc=2&di=u2261530&dri=0&dis=0&dai=1&ps=417x465&coa=at%3D3%26rsi0%3D680%26rsi1%3D200%26pat%3D6%26tn%3DbaiduCustNativeAD%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D14%26rss2%3D%2523000000%26titSU%3D0%26ptbg%3D90%26piw%3D0%26pih%3D0%26ptp%3D0&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1460083496664&ti=JS%E8%AE%BE%E7%BD%AEcookie%E3%80%81%E8%AF%BB%E5%8F%96cookie%E3%80%81%E5%88%A0%E9%99%A4cookie_javascript%E6%8A%80%E5%B7%A7_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&ari=1&dbv=2&drs=1&pcs=1920x971&pss=1920x423&cfv=0&cpl=5&chi=1&cce=true&cec=GBK&tlm=1459406707&ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F64330.htm&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DDy-I_AKMVr6O-E5C3HRuOJyhxkepcnFAr5mNtllLEdwMcEok4JVbWyXP-tS3C-yD%26wd%3D%26eqid%3D8a40284b0002a76f0000000457071b2f&ecd=1&psr=1920x1080&par=1920x1030&pis=-1x-1&ccd=24&cja=false&cmi=7&col=zh-CN&cdo=-1&tcn=1460083497&qn=0c042c031a9ff558&tt=1460083496582.86.267.270" width="680" height="200" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="display: block; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">

JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的。

而cookie是运行在客户端的,所以可以用JS来设置cookie.

假设有这样一种情况,在某个用例流程中,由A页面跳至B页面,若在A页面中采用JS用变量temp保存了某一变量的值,在B页面的时候,同样需要使用JS来引用temp的变量值,对于JS中的全局变量或者静态变量的生命周期是有限的,当发生页面跳转或者页面关闭的时候,这些变量的值会重新载入,即没有达到保存的效果。解决这个问题的最好的方案是采用cookie来保存该变量的值,那么如何来设置和读取cookie呢?

首先需要稍微了解一下cookie的结构,简单地说:cookie是以键值对的形式保存的,即key=value的格式。各个cookie之间一般是以“;”分隔。

JS设置cookie:

假设在A页面中要保存变量username的值("jack")到cookie中,key值为name,则相应的JS代码为:

复制代码代码如下:

document.cookie="name="+username;

JS读取cookie:

假设cookie中存储的内容为:name=jack;password=123

则在B页面中获取变量username的值的JS代码如下:

?
1
2
3
4
5
6
7
8
9
10
var username=document.cookie.split( ";" )[0].split( "=" )[1];
//JS操作cookies方法!
//写cookies
function setCookie(name,value)
{
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "=" + escape (value) + ";expires=" + exp.toGMTString();
}

读取cookies

?
1
2
3
4
5
6
7
8
function getCookie(name)
{
var arr,reg= new RegExp( "(^| )" +name+ "=([^;]*)(;|$)" );
if (arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null ;
}

删除cookies

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if (cval!= null )
document.cookie= name + "=" +cval+ ";expires=" +exp.toGMTString();
}
//使用示例
setCookie( "name" , "hayden" );
alert(getCookie( "name" ));
//如果需要设定自定义过期时间
//那么把上面的setCookie 函数换成下面两个函数就ok;
//程序代码
function setCookie(name,value,time)
{
var strsec = getsec(time);
var exp = new Date();
exp.setTime(exp.getTime() + strsec*1);
document.cookie = name + "=" + escape (value) + ";expires=" + exp.toGMTString();
}
function getsec(str)
{
alert(str);
var str1=str.substring(1,str.length)*1;
var str2=str.substring(0,1);
if (str2== "s" )
{
return str1*1000;
}
else if (str2== "h" )
{
return str1*60*60*1000;
}
else if (str2== "d" )
{
return str1*24*60*60*1000;
}
}
//这是有设定过期时间的使用示例:
//s20是代表20秒
//h是指小时,如12小时则是:h12
//d是天数,30天则:d30
setCookie( "name" , "hayden" , "s20" );

以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Cookiesession都是用来跟踪用户状态的技术。 Cookie是一种存储在用户计算机上的小型数据文件,由网站创建并存储在浏览器中,当用户再次访问该网站时,浏览器会将Cookie发送回服务器。 而Session则是在服务器端存储的一组数据,当用户访问网站时,服务器会创建一个session并为其分配一个唯一的ID,这个ID会存储在Cookie中或通过URL传递,服务器可以通过这个ID来识别用户并跟踪用户状态。 总之,Cookie是存储在客户端的,Session是存储在服务器端的。 ### 回答2: CookieSession都是Web应用中常用的身份验证和信息传递方式。它们都可以通过存储数据的方式来跟踪用户在网站上的活动,但是CookieSession具有不同的特性,它们的作用也有所不同。 Cookie是存储在客户端的字符串。比如用户首次访问网站时,可以保存一个Cookie,里面记录着用户的登录名和密码。当用户下一次访问同一网站时,Cookie会把这些信息传递给服务器。服务器可以根据这些信息来验证用户的身份,从而保证用户可以直接访问需要登录才能进入的页面。Cookie可以设置过期时间,但除非用户主动删除它们,否则它们会一直保存在客户端。因此,Cookie有协议带来的限制,浏览器可能会限制cookie的数量。 相反,Session是服务器上的一个临时文件,它用于存储用户所需的信息,并且仅在用户访问Web应用程序时才存在。当用户首次访问网站时,服务器会创建一个Session,为它分配一个唯一的Session ID,然后将该ID存储在Cookie中,以便以后从Cookie中读取。当用户与服务器的交互完成后,Session会被销毁。 因为Session是服务器上的文件,所以它可以存储任意数量的数据,并且数据在客户端中不可见。这意味着Session更加安全,因为用户无法修改它们。但是Session需要占用服务器的存储空间,因此,如果同时有多个用户在访问,则会增加服务器的负载。 总的来说,CookieSession都是Web应用程序中重要的工具,但它们的使用在很大程度上取决于应用程序的需求。如果安全性是优先考虑的因素,则使用Session更安全。但是,如果需要存储的数据量过大,则使用Cookie可能更为有效。 ### 回答3: CookieSession都是用来在Web应用程序中存储用户信息的技术。Cookie是在浏览器端存储用户信息的技术,Session是在服务器端存储用户信息的技术。它们都是用来解决HTTP协议无状态性的问题,使Web应用可以记录用户的状态信息。 具体区别如下: 1. 存储位置不同:Cookie保存在客户端浏览器的硬盘中,Session保存在服务器端的内存或者文件中。 2. 存储内容不同:Cookie中存储的是明文信息,如果被截获,则会泄漏用户信息。而Session中存储的是加密后的Session ID,可以防止信息泄露。 3. 存储方式不同:Cookie是按照域名的方式来存储的,一个域名下可以设置多个CookieSession是基于会话的方式来存储,一旦会话结束,Session中的信息就会被清除。 4. 处理方式不同:Cookie需要客户端发送HTTP请求时,携带Cookie信息才能达到服务器端;而Session则是在客户端第一次访问时创建的,服务器会为每个会话生成一个唯一的Session ID,并在Session中记录用户状态信息,而客户端每个HTTP请求都会带上Session ID信息,服务器通过及时更新Session信息,从而达到状态维护的目的。 总结来说,CookieSession都是实现Web应用程序状态管理的技术,它们各自有各自的优点和缺点。简而言之,Cookie可以在客户端进行存储,可以跨域名存储,但安全性较低;而Session只能在服务器端进行存储,安全性比Cookie高,但会占用服务器端资源。开发人员可以根据具体场景来选择使用哪种技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值