session存放在服务器的内存中,session_id存放在服务器内存以及客户机中的cookie中
当用户发送请求的时候,服务器将用户cookie里面记录的session_id和服务器内存中存放的session_id进行比对,从而找到用户相对应的session进行 *** 作。
所以,如果客户端禁止了cookie的话,那么session也就没有办法使用。
session是在服务器端程序运行的过程中创建的,不同的语言实现的应用程序创建session的方法不同,比如在Java中我们是通过调用>
01
它们分别是什么?
session:
session的中 翻译是“会话”,当 户打开某个web应 时,便与web服务器产 次session。服务器使 session把 户的信息临时保存在了服务器上, 户离开 站后session会被销毁。这种 户信息存储 式相对cookie来说更安全,可是session有 个缺陷:如果web服务器 做了负载均衡,那么下 个 *** 作请求到了另 台服务器的时候session会丢失。
cookie:
cookie是保存在本地终端的数据。cookie由服务器 成,发送给浏览器,浏览器把cookie以kv形式保存到某个 录下的 本 件内,下 次请求同 站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加 了 些限制确保cookie不会被恶意使 ,同 时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。
cookie的组成有:名称(key)、值(value)、有效域(domain)、路径(域的路径, 般设置为全局:"")、失效时间、安全标志(指定后,cookie只有在使 SSL连接时才发送到服务器(>分布式Session一致性说白了就是服务器集群Session共享的问题。
Session是服务器用来保存用户 *** 作的一系列会话信息,由Web容器进行管理。单机情况下,不存在Session共享的情况,分布式情况下,如果不进行Session共享会出现请求落到不同机器要重复登录的情况。
假设第一次访问服务A生成一个sessionid并且存入cookie中,第二次却访问服务B客户端会在cookie中读取sessionid加入到请求头中。如果在服务B通过sessionid没有找到对应的数据,那么它创建一个新的并且将sessionid返回给客户端,这样并不能共享我们的Session无法达到我们想要的目的。
不能使用session会话可能的原因可分几方面
如果是服务端不能用,例如PHP有的时候不能用,可能是Session的存储位置设置有问题或是没有开启session支持
如果是asp或net不能用(IIS6) 有可能是应用程序池回收过于频繁
如果访问的用户有的能用,有的不能用那就是客户端浏览器禁用了Cookie
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)