回复内容:session是用户会话,那么要实现用户会话,服务器端应该有个储存会话信息的程序存在。
session的服务端服务实现由很多种,常见有磁盘文件保存(php默认方式,会阻塞)、mysql(discuz! 的自己的实现方式)、memcached(性能较高的一种实现)、redis。
大致原理就是储存一个独一无二的用户令牌(这里暂且称为sessionid吧)和令牌对应的用户数据,例如这样:
sessionid | userid1a6b78e7 | 195b6se3c66 | 0 (默认,未登陆状态)e135c338 | 131 (用户将账号密码验证码和sessionid发回服务器后,将userid改为用户主键值)
session 是什么?
服务器生成的一个 shit 值,甩给客户端,客户端拿着当金牌令箭,只要客户端有办法把这个金牌令箭告知服务器就好了。
在这样的情况下,你怎么传递这个金牌令箭,就看你的个人喜好了。
在这样的认知下,你应该知道,怎样使用 session 技术仅看你客户端和服务器沟通的方式,什么 get post shit 随你喜好了
所以说,学东西要多想想为什么、这样做的原因是什么?好处是什么?不这么做会怎样?有没有更好的设计方案?
特别是搞 web 的,不能连我这个没搞过 web 的人都不如。可以,在每条url中都加上session字段,这种做法现在在很多老式wap网站上依然能够见到,因为当时的具有wap浏览器的手机因为内存小的可怜无法存储cookie。还有一种办法就是每个页面都加一个hidden隐藏域,value写上session,总之方法很多,灵活变通。可以etag 已经是最要脸的追踪手段了好吗。。。
试试 authentication cookie
src=http://session:@zhihu.com/>
我只是补充一下:我年轻的时候做一个中国移动的论坛项目,能直接从wap网关拿到当前请求的手机号,用来当session key再好不过了。
总结一下:
1 cookie
2 请求的参数中带着(get、post)
3 html5的localstorage
4 网关反写sessionid可以。可以在url中传递sessionid。但是需要你在php.ini里面开启一个选项,就是允许在url中存在sessionid。这是我今天学servlet写的笔记, 刚好看见这个问题给你扒一点出来
刚接触web开发不到四天
理解可能有偏差, 轻喷
(笔记中说的身份证是sessionid号)
第一: session是什么?
第二: 浏览器禁用了cookie的话, 怎么办?
session池是服务端存储用户(广义上的用户,可以是用户也可以是某个客户端非登录用户)的信息的集合,每个session都对应一个用户信息,cookie是客户端用来告知服务端,我是哪一个用户,那么既然cookie承担了这么一个功能,那么cookie的职责一旦被禁用,那么url也可以承担起同样的责任,url后面加
参数,或者http头加信息来回传,但是如果cookie的职责这么容易被替代的话,那他就不叫cookie了,如果说当次请求可以被替代,那么下一次比如你直接打开浏览器请求淘宝网的时候或者直接手输,不是使用cookie的话,其他的办法的话,客户端是不能拿出标志你身份的东西,从而服务端并不知道你是谁。如果说浏览器在请求一个手输的网址的时候,除了自动带上cookie,还会带其他小东西,那么这个小东西能替代cookie,关于这一点开下chrome,观察下network下面的http请求头即可,我并没有发现这样的小东西。就凭这一点cookie还是cookie.
