php 文件session弊端,session是什么?为什么不推荐使用file保存session?

什么是 Session

在 web

应用开发中,Session 被称为会话。主要被用于保存某个访问者的数据。

由于 HTTP

无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的。

既然如此,那么服务端怎么知道是哪个访问者在请求它呢?又如何将不同的数据对应上正确的访问者?答案是,给访问者一个唯一获取 Session

中数据的身份标识。

打个比方:当我们去超市购物时,被保安告之我们是不能带物品进去的,必须将物品寄放在超市的储物箱中。我们把物品交给了他,他怎么知道这些物品谁是谁的,于是他给了我们不同的钥匙。当我们要取走我们的物品时,用唯一的钥匙打开对应的箱子即可。

就如同上面的比方一样,可以将 Session

理解为存放我们数据的“箱子”,当然,这些“箱子”都在服务端那。服务器给访问者唯一的“钥匙”,这个“钥匙”被称作 session_id。访问者凭借自己的 session_id,就能获取到自己存在服务器端的数据。

session_id通过两种方式传给访问者(客户端):URL或 Cookie。详情参见:传送会话ID

Session 和 Cookie

有什么关系

Cookie 也是由于

HTTP 无状态的特点而产生的技术。也被用于保存访问者的身份标识和一些数据。每次客户端发起 HTTP 请求时,会将 Cookie

数据加到 HTTP header 中,提交给服务端。这样服务端就可以根据 Cookie 的内容知道访问者的信息了。

可以说,Session 和

Cookie 做着相似的事情,只是 Session 是将数据保存在服务端,通过客户端提交来的 session_id

来获取对应的数据;而 Cookie 是将数据保存在客户端,每次发起请求时将数据提交给服务端的。

上面提到,session_id 可以通过 URL 或 cookie 来传递,由于 URL 的方式比 cookie

的方式更加不安全且使用不方便,所以一般是采用 cookie 来传递 session_id。

服务端生成

session_id,通过 HTTP 报文发送给客户端(比如浏览器),客户端收到后按指示创建保存着 session_id 的

cookie。cookie 是以 key/value 形式保存的,看上去大概就这个样子的:

PHPSESSID=e4tqo2ajfbqqia9prm8t83b1f2

在 PHP 中,保存

session_id 的 cookie 名称默认叫作 PHPSESSID,这个名称可以通过 php.ini 中 session.name 来修改,也可以通过函数 session_name() 来修改。

为什么不推荐使用 PHP 自带的 files 型

Session 处理器

在 PHP 中,默认的

Session 处理器是 files,处理器可以用户自己实现(参见:自定义会话管理器)。我知道的成熟的 Session

处理器还有很多:Redis、Memcached、MongoDB……为什么不推荐使用 PHP 自带的 files

类型处理器,PHP 官方手册中给出过这样一段 Note:

无论是通过调用函数 session_start()

手动开启会话, 还是使用配置项 session.auto_start 自动开启会话, 对于基于文件的会话数据保存(PHP

的默认行为)而言, 在会话开始的时候都会给会话数据文件加锁, 直到 PHP

脚本执行完毕或者显式调用 session_write_close() 来保存会话数据。

在此期间,其他脚本不可以访问同一个会话数据文件。

为了证明这段话,我们创建一下 2 个文件:

文件:session1.php

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值