PHP开发 加入小组

298个成员 3006个话题 创建时间:2011-05-30

提问时间,关于 session

发表于 2013-02-20 3973 次查看

题目比较基础,知道的同学就略过吧,觉得不太清楚的同学可以试着解答(不清楚的一定要解答,不然开发用户登入功能就没完全搞清楚)

在 PHP 的开发中,在做类似会员登入的功能时,会用到 session(会话),下面是关于 session 的几个问题:

1. session 必须依赖 cookie 么?

2. session 的数据必须存在文件中么?

3. 使用 PHP 内置的 session 机制,创建一个 session 的流程是怎样的?下一个访问,客户端得到自己的 session 的流程是怎样的?

4. 大流量网站,能直接使用 PHP 内置的 session 机制么?

延伸问题:

1. session 是在什么情况下诞生的?

2. 在线用户列表是怎么实现的?

3回复
  • 2楼 HiZhou 2013-02-26

    时间到了,自己回答。。。

     

    1、session 不依赖 cookie,使用 cookie 是为了保存 sessionId,把 sessionId 附在url、或者放在表单中,请求时,服务器也能得到 sessionId,不过使用 cookie 会方便的多。

    2、session 的数据能放在很多地方,文件、数据库、缓存,等等,只要能持久化就行,PHP 默认采用文件方式保存 session 的数据是因为实现简单、所有环境都支持,能演示出效果。

    3、略,不清楚的必须自己画一遍流程图的。

    4、PHP 内置的 session 机制,是使用内置的 session 系列函数,并将 session 数据保存到文件中。大流量的网站,如果 web 服务器大于一台,这种机制就有问题。

    假设有 A B 两台 web 服务器,用户的请求会随机分发到这两台上,某用户请求登录时,在 A 上创建了 session 数据文件,但下一次请求被分配到 B,B 上面没有对应 session 数据文件,于是程序判断用户没有登录,于是用户认为网站出错。当然有补救的方案,同步 session 数据文件,但这复杂化了,简单的方案,应该是自己去实现 session 机制,将 session 数据保存到数据库等地方。至于数据库、数据表压力会不会太大,需要分散压力,是另一个话题。

    延伸问题:

    1、印象中,是因为用 cookie 保存用户数据有安全问题,因为 cookie 是客户端的,然后就折腾出了 session。

    2、将用户的 session 数据结构化的保存起来,并能够索引,比如建立表结构、每个用户的 session 数据存为一条记录。


    另外问大家个问题:

    前几天有同学说要去报培训班学习 PHP,大家怎么看?这里有多少同学对培训班有兴趣的?

发表回复
功能维护升级中,维护完成完后将再次开放,非常抱歉给您学习造成的不便。