首页>>技术前沿>>B/S,C/S软件系统开发
你这么用过session吗?
作者:西安软件开发公司 | 原创 来源:西安软件开发公司 | 时间:2018年5月11日| 点击:0次 | 【评论】

        实际上,session在php,.net,java等只要是后端语言都会用到。session的存储机制,各种语言都大体差不多。我觉得这跟cookie在各个语言中都会用到差不多。.net,java我没去了解过。但是存储原理是差不多的。区别就是,php,java,.net调用的函数,读和取session数据的方式不同。默认都是存储在本地文件中的(不然怎么会涉及到session共享问题呢,存储在数据库本身就可以实现共享的)。

        其实我的理解是,session的原理都是一样的。讨论session共享方案设计,是可以抛开具体的语言去讨论session共享方案设计。

 

下面我来谈谈解决session共享问题的几种思路:


一.将原本存储在服务器上的session数据存储到客户端的cookie中去.


        这样子,就不需要涉及到数据共享了。a客户端请求的时候,原来生成在服务器的数据生成到浏览器的cookie中,根据cookie中的数据识别用户。
        php由原来的”从本地(也就是服务器)磁盘上读取session数据”转变为”浏览器的cookie中读取数据”, 这样子,在多台php服务器负载均衡的情况下,即便第一秒请求是a服务器,第二秒请求是b服务器,都不需要管哪台服务器了。反正都是读取客户端上的cookie数据。 一般是把session数据按照自己定义的加密规则,加密后后存在cookie中。 数据保存在cookie中这种做法有好处,也有坏处。 好处是服务器的压力减小了,因为session数据不存在服务器磁盘上。根本就不会出现session读取不到的问题。

 

 

带来的弊端是:

        网络请求占用很多。每次请求时,客户端都要通过cookie发送session数据给服务器。

        另外,浏览器对cookie的大小存在限制。每个浏览器限制是不同的。

        Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。

        Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。

        Internet Explorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。

         所以这种方案不适合高访问量的情况下,因为高访问量的情况下,每次请求浏览器都要发送session数据给服务器。一般一个cookie大小2k的样子。

         要占用很多带宽了(服务器购买带宽是一个很大费用),成本增高。归纳为带宽性能,速度问题。

        存储到cookie中去,第二方面是安全问题:把session数据放到客户端,一般session中存的都是重要性数据(帐号、昵称、用户id等),会存在安全问题。

         了解到,淘宝以前用过这种方式,把session数据存储到cookie中,根据cookie来识别用户。

 二、可以将session数据保存在memcached,redis之类内存数据库中,memcached是基于内存存储数据的,性能很高,用户并发量很大的时候尤其合适。

        主要是利用内存的数据读取速度是很快的,与磁盘读取的速度不是一个数量级的。

        使用内存存储:方便统计在线人数,内存的速度比磁盘访问快、内存数据库系统能够控制内存中的过期数据自动失效(刚好符合session过期需要)。

        存储在redis比较理想的选择,存储在数据库中方便存储统计在线人数,那么存储在redis中也实现了这个要求。

        也可以存储在memcache中。但redis支持的数据类型多。所以用它好点。

 

此内容DOC下载 此内容PDF下载

【全文完】
关键词标签: session 
0 ([$-顶稿人数-$])
0 ([$-踩稿人数-$])

版权声明:

1、陕西弈聪网站内容中凡注明“来源:XXX(非陕西弈聪网站)”的作品,转载自其它媒体,转载目的在于传递更多信息,其中涉及的网站建设,网站优化,百度关键词优化,西安软件开发等技术细节并不代表本站赞同支持其观点,并不对其真实性负责。对于署名“陕西弈聪”的作品系本站版权所有,任何人转载请署名来源,否则陕西弈聪将追究其相关法律责任。

2、本站内容中未声明为“原创”的内容可能源自其它网站,但并不代表本站支持其观点,对此带来的法律纠纷及其它责任与我方无关。如果此内容侵犯了您的权益,请联系我方进行删除。