本文共 744 字,大约阅读时间需要 2 分钟。
http协议是一种无状态的协议,服务器本身并不能区分出每个会话来。不过各种网页编程语言想asp.net php java等都是实现了自己的一套session管理机制的。我搜索了一下网上资料,总结一下看到的原理说明,大概有以下几点:
1. 服务器需要在 客户端与服务器间不停的传递session id的。会话状态的维护就是要靠增加这个来做到的吧,把http没有的功能扩展了一下。 传递保存的办法有 cookie 或者get 方法参数,隐藏form的属性,http协议的头部 等各种各样的办法。具体可以参考网上文档。
2. Session id的生成。
服务器需要一个很好的办法来区分不同的客户端的会话,所以也要为每个客户端生成一个不同session id了,避免别人伪造等。 根据网上文档 php实现大概的生成方法是:
hash_func = md5 / sha1 #可由php.ini配置
PHPSESSIONID = hash_func(客户端IP + 当前时间(秒)+ 当前时间(微妙)+ PHP自带的随机数生产器)3. session在服务器端的保存功能。
各个语言平台里面都允许为session保存大量的数据的吧。保存的位置或者说办法也有很多
(1) 保存平台实现的内置管理器
(2) 保存于数据库 。 这个就可以在不同的机器上共享了。
(3) 扩展实现,保存于memcached等高性能服务里。 比如某牛人为tomcat实现的memcached session保存机制 “Use MemCacheStore in Tomcat”
这种应该性能就非常好了,而且session可以在集群系统不同机器上面共享访问了。
4. session id 应该是可以被监听到,然后伪造攻击的。转载地址:http://djfob.baihongyu.com/