关于存session,cookie还是数据库或者memcache的优劣,部分网上抄录

从效率考虑:cookie > memcache > 数据库
cookie对服务器端负载没影响,如果加密、解密会多消耗一点点cpu。带宽倒是会消耗得多一点,同域名下的所有http request header都会附带cookie,所以在大流量下,把js、css、图片放到另外一个域名下会节约掉这部分流量。
memcache会占用一些服务器内存
数据库连接本来就是典型的瓶颈,能免则免

从安全性考虑:memcache/数据库 > cookie
cookie存放在客户端,需要考虑的安全性比较多一点
memcache、数据库都在服务器端,相对cookie来说会稍微安全点

从服务器可扩展性考虑:cookie > memcache/数据库
如果有多台后端服务器,就需要共享session数据
memcache、数据库都可以做到在多台服务器之间共享session,但是容易形成单点瓶颈,大负载下需要考虑存储路由之类
cookie完全不需要在服务器端共享session数据,与REST无状态风格暗合,REST无状态风格见下面。
可扩展性这个点也不是绝对,如果用nginx的ip_hash方式组织多个后端upstream就不需要共享session,但这些都需要后端架构上的考虑和设计,而cookie则完全没有这方面的扩展性问题
增补:cookie其实也不是在扩展性上没有任何问题需要考虑,说“完全没有”有点绝对了,可扩展性这种事情,复杂度比较高,需要实际问题实际分析。在比较简单理想的情况下,cookie的可扩展性会比较好点。

为什么在请求中传递SessionID被普遍认为是unRESTful的,而将用户的credentials包含在每个请求里又是一种非常RESTful的做法
无状态指的是任意一个Web请求必须完全与其他请求隔离,当请求端提出请求时,请求本身包含了相应端为相应这一请求所需的全部信息。
REST无状态风格
RESTful架构对于state的两个不同的解释: 应用状态(Application State)和资源状态(Resource State)。
应用状态:指的是与某一特定请求相关的状态信息
资源状态:则反映了某一存储在服务器端资源在某一时刻的特定状态,该状态不会因为用户请求而改变,任何用户在同一时刻对该资源的请求都会获得这一状态的表现(Representation)。
RESTful架构要求服务器端不保有任何与特定HTTP请求相关的资源,所以应用状态必须由请求方在请求过程中提供。
在Session ID可以被认为是一个用来标识某一会话状态的Key,将其传递给服务器端意味着这样一个请求:“请帮我取出这个状态信息”,也就是说这个请求假设响应方保有着状态信息。由于与某一特定请求相关的状态属于应用状态,而RESTful架构要求任何此类状态由请求方负责提供,所以传递Session ID被认为是unRESTful的做法。反过来,user credential作为一种应用状态,是被期望由请求方提供的,所以在请求中传递user credentials(姑且忽略安全性问题)是符合RESTful架构规范的

nginx的ip_hash方式:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的共享问题。

对于cookie保存验证码,仍旧不能杜绝机器的攻击,机器可以通过将通过种cookie的方式,然后在请求中发送对应的验证码来访问,这样服务的对验证码的判断,一直都是正确的。
可能有一种办法是验证码拼上时间戳的方式,再加密来种到cookie中,可是就算有了时间戳,也不能避免在你时间戳有效的范围内的攻击。

session的文件保存
session机制,在服务端session_start()之后,就会在响应头里面发送一个Set-Cookie字段,下次请求时,cookie中就会带上PHPSESSID,然后服务端根据PHPSESSID找到对应的保存session的文件。
所以涉及到session的有效期就分为客户端和服务器端。
客户端
session.cookie_lifetime=0时,关闭浏览器session就会失效
服务器端
session.gc_maxlifetime//session的有效期
session.gc_probability
session.gc_divisor
session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。
此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。
当gc_probability/gc_divisor=1的时候意味着,每次请求来调用session_start()都会执行一次垃圾回收机制,将磁盘过期的session文件删除。亲试。
如果单独修改了gc_maxlifetime,即使session已经失效,但是如果没有触发垃圾回收机制,当请求再次过来时,session还是可以使用的。所以session做的登录,就可能会由于客户端保留了PHPSESSID导致过了几天再次访问还是登录状态

时间: 2024-10-06 09:55:31

关于存session,cookie还是数据库或者memcache的优劣,部分网上抄录的相关文章

关于用户登录状态存session,cookie还是数据库或者memcache的优劣

session中保存登陆状态: 优:整个应用可以从session中获取用户信息,并且查询时很方便.在session中保存用户信息是不可缺少的(web应用中) 缺:session中不宜保存大量信息,会增减内存消耗量 cookie中保存登陆状态: 优:数据保存在客户端,方便用户下次登录.如:”记住我“功能 缺:安全性不高,一般都是讲数据加密后保存在cookie中 memcache应用主要体现在对大量数据的cache,如:将经常用到的数据保存在memcache中,减少对数据库的访问次数,在web应用中

将session存入数据库,memcache的方法

//存入数据库 <?phpif(!$con = mysql_connect('localhost','root','123456')){    die('连接数据库失败');}$link = mysql_select_db('session');//session入库function open($save_path,$session_name){    return true;}function close(){    }function read($id){    //查询的sql语句    

认证 协议 JWT OAuth Session Cookie

本文翻译自Auth-Boss. 如果有翻译的不恰当或不对的地方, 欢迎指出. 成为一个认证老司机, 了解网络上不同的身份认证方法. 本文档的目的是记录和编目Web上的身份验证方法.认证指的是创建一个系统的过程,用户可以通过该系统"登录"在线服务,并授予对受保护资源的访问权限.以下引用可能更好地总结我想要解释的内容: 客户端认证涉及向Web上的服务器证明客户端(或用户)的身份.[1] How 我写作风格简洁,会用到一些技术词. 免责声明:本文档不作为包含所有认证方法的网络的目录;本文档也

老生常谈session,cookie的区别,安全性

一,为什么session,cookie经常会有人提到 做web开发的人基本上都会用session和cookie,但是仅仅只是会用,并不知道session和cookie的真正的工作原理,都只是凭着感觉来猜测.web开发者只要利用它们来完成工作就行了,所以每个人的理解基本都会有大同小异,我想这就是session,cookie经常会被讨论的原因.本文也是根据个人经验,以及个人所学,对session,cookie的一些看法,纯属个人见解,希望得到大家的更正和建议. 二,什么cookie cookie分为

Memcached存Session数据、访问安全性、使用场景总结(3)

最近做了一个单点登录SSO,登陆后的凭证放到Memcached令牌放到Cookies:但是用户经常掉线,开发环境和测试却没有这个问题,最后从Memcached找到原因. Memcached概念.作用.运行原理.特性.不足简单梳理(1) Memcached下载安装.NET对Memcached进行CRUD操作(2) Memcached存Session数据.访问安全性.使用场景总结(3) 一.Session数据放入到Memcached? Memcached创建者Dormando写过两篇文章: Sess

Redis+Django(Session,Cookie、Cache)的用户系统

转自 http://www.cnblogs.com/BeginMan/p/3890761.html 一.Django authentication django authentication 提供了一个便利的user api接口,无论在py中 request.user,参见 Request and response objects .还是模板中的 {{user}} 都能随时随地使用,如果从web开发角度来看,其实无非就是cookie与session的运用. 在项目首页,在登陆和注销状态下分别输出

Application,Session,Cookie你能分的清吗?--【Asp.Net】

背景: 每个东东产生的时候都是有原因滴,我个人觉得,这几种方式跟缓存很类似,都是把常用的一些数据放到缓存里面先存起来,比直接从内存或硬盘中读取更加的迅速,从而提高效率.Application,Session,Cookie是Asp.Net中常用的三种存取临时数据的方法. Application/session/Cookie对比: 对比 Session Application Cookie 作用 用于保护用户的专用信息 用于保存所有用户的公共数据信息. 用于保护客户浏览器请求服务器页面的请求信息 使

session cookie原理及应用

一.术语session在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的. session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间 ①.最混乱的是“用户(客

session cookie简介

会话机制:Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息.让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并