[字号:  ]

如果PHP没有提供Session的实现,请用PHP设计一个简单的Session实现

发布时间:2008-9-14 20:04   作者: kukukyky   信息来源: PHPChina 开源社区门户
这个问题怎么解决???

最新回复

七月十五 at 2008-9-14 20:11:53
这是一个面试题,可以用文件、数据库、全局变量等来实现SESSION功能
programmerhuang at 2008-9-14 20:14:32
你了解一下SESSION的原理就知道了, 其实SESSION不是需要什么特别的技术的.
sara at 2008-9-14 22:14:07
一个用户进来,生成一个HASH值保存到COOKIE,然后建一个全局变量保存到和这个HASH值对应的文件,就可以模拟SESSION的基本功能了。
lxylxy888666 at 2008-9-14 22:16:25
顶LS各位的
最好别用Cookie..
lxylxy888666 at 2008-9-14 22:28:57
.....如果是我,我会把HASH值保存到库里...然后对应不同的文件,保存用户的信息,这样是不好点??
sara at 2008-9-14 22:39:18
如果不需要保存cookie的话,不用hash值,一个全局变量就搞定了。
如果保存到数据库的话,那应该是hash值和全局变量一起保存才行(类似定制session保存到数据库,就是6个函数和在一起的那种),然后hash值再保存到cookie里,下次进来只需判断一下就好了。

[ 本帖最后由 sara 于 2008-9-14 22:42 编辑 ]
lxylxy888666 at 2008-9-14 22:48:14
//取数据库的HASH,
//全局HASH
//用一个KEY保存是否登陆(退出会做相应处理)
//文件保存用户信息
为什么要用COOKIE呢?从安全方面,我不用,任何客户端的都可模拟
造成安全隐患
deeka at 2008-9-14 23:25:16
$_SESSION只是一个数组
Tomcat at 2008-9-15 01:42:59
序列化一个全局变量到文件即可。
programmerhuang at 2008-9-15 06:08:22
> 为什么要用COOKIE呢?从安全方面,我不用,任何客户端的都可模拟
不用Cookies, 你怎么知道当前用户对象哪个SESSION的数据呢? 当然也有用Query string的.
chnzbq at 2008-9-15 09:22:11
能否在多个页面中,人手传递那些session值?
lxylxy888666 at 2008-9-15 10:16:23

QUOTE:

原帖由 programmerhuang 于 2008-9-15 06:08 发表
> 为什么要用COOKIE呢?从安全方面,我不用,任何客户端的都可模拟
不用Cookies, 你怎么知道当前用户对象哪个SESSION的数据呢? 当然也有用Query string的.
HASH值是和用户对应的
liexusong at 2008-9-15 10:35:49
貌似要用到cookie,不信你可以在Firefox中清除cookie看看session是否丢失!!
lxylxy888666 at 2008-9-15 10:39:29
我们的项目已经做了这方面,比这要求还高,N台远程服务器用户信息同步.没有用COOKIE
sara at 2008-9-15 10:47:07
@lxylxy888666
你对cookie的理解可能就是脚本里有没有setcookie吧。session_start就把sid自动放在cookie里,只不过不需要开发者显式的去设置而已。
多台服务器共享session数据当然要依靠cookie了,你叫用户把浏览器COOKIE关了看还能不能共享。
lxylxy888666 at 2008-9-15 10:52:15
呵呵,LS这点我还算知道吧.....
从来没有用过session_start()这个东西...
同样能够做到!
lxylxy888666 at 2008-9-15 10:58:06
global $_id;
vister::set($_id); //session并同步
vister::get($_id); //取得信息
中间过程就比较复杂了...

[ 本帖最后由 lxylxy888666 于 2008-9-15 10:59 编辑 ]
programmerhuang at 2008-9-15 11:42:28
> HASH值是和用户对应的
那你的HASH值存放在哪里呢? 不用Cookies, 除了Query string我还真想不起有什么办法了.
如果可以的话, 可否谈谈, 你们是怎么实现的, 谢谢.

> 从来没有用过session_start()这个东西...
> 同样能够做到!
如果自己实现SESSION, 当然就不需要session_start()了.
问题是自己要怎么实现?
lxylxy888666 at 2008-9-15 14:43:27
详细说明比较复杂了,涉及好几个机制
happyeddie at 2008-9-15 20:13:14
http无状态协议,如果真能免cookie实现session,我还真想不到。
query string同样可以伪造,而且伪造的门槛更低,用他来代替cookie实现sessionid是很SB的做法