首先说一下Web.config文件中的cookieless="false"的理解

cookieless="false"表示: 如果用户浏览器支持cookie时启用会话状态(默认为False)

cookieless="true"表示,如果用户浏览器不支持cookie时启用会话状态(默认为False) ----这种情况下sessionID无法存储在客户端cookie中(因为浏览器不支持cookie),但是又要启用会话状态,怎么办,那就是会自动把sessionID存储在url中,也就是说url中会多出一些字符(比如 http://localhost/(S(hbbvecjstz42edqcjobbyh45))/login.aspx)

以下文章转载自 http://www.blogjava.net/henry1451/articles/209066.html?_sm_byp=iVVHtw6wWV103RW3

一句话就是,一般情况下Session是需要Cookie支持的!
大家都知道Session是在服务器端保存客户状态的,只要浏览器不关闭,就可以一直保存该用户的信息,通常用做来保存是否登陆信息等.而Cookie与其刚好相反,它将信息保存到客户端,它是写入文件的,俗成小甜点..
今天做了个程序,是判断是否登陆成功的,没有使用Cookie,而全部使用的Session机制实现的.本来很好用,可吃完午饭后,突发起想的把浏览器的cookie禁止了,这时候产生了一件让我很惊讶的事情session竟然不好用了,也就是说,无论我怎么登陆系统,系统都认为我没有登陆! 当我把cookie打开后session就好用了,系统也恢复正常了?!这是怎么会事?感觉我和思维中的某种原则性的东西冲突了
于是决定好好研究下.
为什么登陆后,只要不关闭浏览器,session就能一直存在?当然session的数据是保存在服务器上的,但服务器是怎么识别这些数据都是谁的呢?答案是sessionid,每一个浏览者都唯一的sessionid,这就很好的区分了不同浏览者的不同session了.sessionid是怎么产生的?应该是第一次访问服务器的时候随即生成的.假如是111,然后他的登陆信息是true,服务器就知道sessionid为111已经登陆了,这些信息都存在了服务器上了.但当浏览者继续操作的时候,也就是打开该系统的另一个页面的时候sessionid怎么办?如何传递?打开另一个页面的时候其实相当于重新访问系统,如果没有特殊的处理机制,系统会再次重新分配一个sessionid的,这样的话就失去意义了~!所以sessionid在第一次访问后应该存在了客户端.能寸哪呢?当然,只能寸在cookie中了,这就是为什么关闭cookie,session就失去作用了
找到这么个例子来描述cookie session的关系再恰当不过了
一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案: 
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。 
2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。 
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。
第一种情况暂时不考虑.看第二种情况,卡片无疑就是cookie了,所有的数据如果都存在卡片上是不安全的,也是容易遗失的(卡片被修改了?卡片遗失了?这都是有可能的).所以才用了第三种情况.客户除了个会员号再什么信息也没有,这是最安全的,但这个会员号必须是客户自己知道的!也就是cookie中必须存储的.
这样解释我今天中午遇到的情况就不惊讶了.

无cookie的解决办法是利用URL重写技术,就是把sessionid的数据保存在url后面http://onewww.net/a.asp?sessionid=111
在.net中,可以用Web.config配置
就是把cookieless="false"改为:cookieless="true"就可以了
还有一种方法是利用表单隐藏字段技术,就是加个input type='hide'的元素.这中技术也在.Net中大量使用,尤其是.Net中的控件.个人很不喜欢这种技术,因为加大了流量(数据都是加密的.体积成倍增加)

默认情况下session是存在inetinfo.exe进程中的
.Net中session是可以存在sql server中的,很强

以下内容转载自 http://www.cnblogs.com/liuzhendong/archive/2011/06/22/2087331.html

1.Session存在server上, asp.net有几种存储方式, 一是inproc, 二是sqlserver, 三是stateserver, 四是可以放到Appfabric Caching中去(这是.net 4.0中新加的).

2.Cookie存在客户端浏览器里, 如果加上expired, 则会保存到客户硬盘上去. 用户可以启用cookie, 也可以关闭cookie, 就这个自由, 导致的问题就来了.

3.网站如何识别已登录用户呢?

用户访问网站时, 网站会分配一个sessionID给该浏览器, 这个sessionID存在于客户端的cookie中, 这样, 客户再请求访问网站的其它页面时, 服务器见到这个客户请求, 一检查cookie, 发现有sessionID, 于是就知道谁已登录的用户, 谁是未登录的了.

就是这个样子的:
HTTP/1.1 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, Jun :: GMT
X-AspNet-Version: 4.0.
Set-Cookie: ASP.NET_SessionId=zvsoy5xcsvflpdzso40s52se; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-
Content-Length:
Connection: Close

4.如果客户端禁止使用cookie呢?

cookie不是很安全, 于是就有人禁止关闭它.

这样, 浏览器SessionID无法存入cookie中, 这样, 网站就不能识别用户了, 也就导致所有人都无法登录了, 而这时, 解决办法就是, 修改web.config中cookieless="true", 即可解决某些用户禁用cookie这个问题.

<sessionState cookieless="true" mode="StateServer" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" stateConnectionString="tcpip=127.0.0.1:42424" timeout="30" />

cookieless="true"的官方解释是:如果用户浏览器不支持Cookie时启用会话状态, 看得不是很懂得样子.

不懂没关系, 实践一下, 这时再访问网站, 就会在url中多出一些字符 (如 http://localhost/(S(hbbvecjstz42edqcjobbyh45))/login.aspx) , 这就是把SessionID放Url中了, 不是不让放cookie中吗? 那就只好放url中了, 感觉很丑陋了.

技术上, cookieless的意思就是这样, 但实际上估计没有网站会这么干的, 直接告诉用户起用cookie不就完了, 不启用cookie就别访问我的网站, 爱来不来, 谁怕谁?

好文章 ASP.NET Session Management Internals
http://www.codeproject.com/KB/session/ASPNETSessionInternals.aspx?_sm_byp=iVVHtw6wWV103RW3

Session和Cookie的分析与区别的更多相关文章

  1. SESSION和cookie的使用和区别

    PHP中SESSION和cookie的使用和区别 cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制. PHP在http协议的头信息里发送cookie, 因此 setcookie( ...

  2. session 、cookie、token的区别

    session session的中文翻译是“会话”,当用户打开某个web应用时,便与web服务器产生一次session.服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后sess ...

  3. session和cookie的联系与区别

    区别: 1.cookie是存放在浏览器上的,session是存放在服务器上的: 2.cookie不安全,别人可以通过分析本地的cookie并进行cookie欺骗,session比cookie安全: 3 ...

  4. session 、cookie、token的区别及联系

    本文转自:https://blog.csdn.net/jikeehuang/article/details/51488020:https://blog.csdn.net/weixin_37196194 ...

  5. session 、cookie、token的区别(转)

    session  session的中文翻译是“会话”,当用户打开某个web应用时,便与web服务器产生一次session.服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后ses ...

  6. Session和Cookie之间存在的区别与联系

    一. 概念理解 你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接.这是因为 你浏览某个网页的时候,W ...

  7. Session和Cookie的用法及区别

    1. Session.Cookie是什么 1.1 概念理解 要了解session和cookie是什么,先要了解以下几个概念. 1.1.1 无状态的HTTP协议 协议:是指计算机通信网络中两台计算机之间 ...

  8. java基础之缓存:session、cookie和cache的区别

    以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application. 其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息. Session则 ...

  9. 接口测试彻底弄懂Session、Cookie、Token的区别及联系hold住面试官--hold住了开3万,hold不住开3K!

    一.前言:接口测试之伤:cookie,session,token本是一家! cookie,session,token的区别早就已经成为测试同行的心病,各大论坛,各大博客,各大视频网站无不充斥着各种疑问 ...

随机推荐

  1. ASP.NET vs MVC vs WebForms

    许多ASP.NET开发人员开始接触MVC认为MVC与ASP.NET完全没有关系,是一个全新的Web开发,事实上ASP.NET是创建WEB应用的框架而MVC是能够用更好的方法来组织并管理代码的一种更高级 ...

  2. (转)每天一个Linux命令(6):mv

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...

  3. 【解题报告】[动态规划] CodingTrip - 携程编程大赛 (预赛第一场)- 聪明的猴子

    原题: 聪明的猴子 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Problem D ...

  4. Heritrix源码分析(四) 各个类说明(转)

    Heritrix的类的确很繁琐,往往继承了一层又一层,最多的继承好像有7层.下面就一个包一个包的说明每个类的作用,由于里面Heritrix组件分明,很多组件没用到的同时该组件的类我也没怎么接触,所以这 ...

  5. hadoop——配置eclipse下的map-reduce运行环境 1

    1.通过修改实例模板程序来实现自己的map-reduce: 为了让示例程序run起来: 1)安装eclipse 2)安装map-reduce的eclipse插件 eclipse的map-reduce插 ...

  6. JBPM4入门——5.流程定义的发布、查询、删除

    本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google 链接: JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流 ...

  7. vim的保存误认为utf8问题

     用vim改脚本改到一处写到'太原':w一下,再打开,,结果给乱码了...我默认sql是用cp936的,,,想到到和记录本的联通问题一样....   可能会问我为什么不用utf8,,,,因为ms200 ...

  8. 嵌入式 Linux下修改MAC地址

    Linux下修改MAC地址 方法一: 1.关闭网卡设备ifconfig eth0 down2.修改MAC地址ifconfig eth0 hw ether MAC地址3.重启网卡ifconfig eth ...

  9. PostgreSQL的备份和恢复

    关于PostgreSQL的备份和恢复详细信息请参阅<PostgreSQL中文文档>. 备份: #pg_dump --username=postgres v70_demo > v70_ ...

  10. GC Buffer Busy Waits处理(转载)

    与单实例不同,在RAC环境中,由于多节点的原因,会因为节点间的资源争用产生GC类的等待,而这其中,GC Buffer Busy Waits又是最为常见的,从性能角度上说,RAC是把双刃剑,用的好,能够 ...