作者GALINE (天真可爱CQD)
看板PHP
标题Re: [请益] PHP验证帐号的方式
时间Wed May 25 15:18:49 2016
> 推 GALINE: 不要把登入/帐号资讯放在 cookie 里面,只存session id
> → GALINE: 登入後的权限放在session里面不让client碰
> session id该怎麽写QQ 有教学吗?
简单的答案:
别管 cookie,跟他分手,不要用它。
程式开始前先呼叫 session_start(),然後把资料都存进 $_SESSION,不要存 cookie。
登出的时候记得把 $_SESSION 里面对应的参数全部清掉。
-----------------------------------------------
稍微详细一点的回答:
关於 session,可以想成是 PHP 对於每一个使用者都在 server side 都开一块空间存
个人资料。你可以在 session 里面放「这人登入的帐号是啥,权限是啥」...之类
的东西。因为在 server 上所以使用者碰不到,不能自己修改
写资料进 $_SESSION 这个 super global 就等於是写资料到 session 里面。
如果 session 被启用,这个变数里面的资料会一直留着,直到 session 放太久过期
在使用他之前你需要呼叫 session_start(),除非机器有设定自动 session start
但是每个 HTTP request 都是等价的,我要怎麽知道哪个 request 是谁?
答案是 PHP 会发给每个人一个临时身份 ID,也就是所谓的 session id。例如:
小明进站 -> Server 发给小明 ID 是 1
小桃进站 -> Server 发给小桃 ID 是 2
之後小明跟小桃的每一个 request 都会带着 session id
server 只要看到 session id 是 1 就知道那是小明, 2 就是小桃,3 就是有人来乱...
session id 通常会放在 cookie 里面,所以每次 request 都会自动带给 server
这一段 PHP 会帮你做掉,你不用(也不该)自己对 cookie 动这一段手脚
当然,对於有能力的使用者他可以乱改 cookie 里面的 session id
但是除非他知道其他人的 session id,不然他乱改只会让自己被登出
另外,现实生活中的 session id 不会是 1/2/3,而是
ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng
这样一大串,所以要猜也不是那麽好猜到,除非你面对的人超厉害...
假设你一切做对,那麽 cookie 里面只会剩下一堆乱七八糟的ID
没办法从 cookie 里面找到帐号密码或权限...之类的资料
cookie 也不是完全不能用,只是以「登入」来说不该用...
-----------------------------------------------
这只是初阶,更多 cookie 跟 session 的安全性讨论可以看这篇文章
http://devco.re/blog/2014/06/03/http-session-protection/
如果看不懂...就...表示你还没有能力担心到这块,慢慢学吧...
--
莉娜用魔法爆破进入屋内。
劫犯从另一个房间里出现,大叫道︰「你是谁!」
莉娜︰「我是个可疑的女人!」
劫犯无言以对。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.122.206
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1464160732.A.262.html
※ 编辑: GALINE (60.248.122.206), 05/25/2016 15:19:37
※ 编辑: GALINE (60.248.122.206), 05/25/2016 15:21:16
1F:推 Neisseria: 推 05/25 15:21
2F:推 shadowjohn: 下一步就多站台共享session path、memory share... 05/25 15:27
3F:推 wilson200106: 下一步Redis(咦 05/25 15:48
4F:推 shadowjohn: 应该是又全部打掉重写,然後又换别人问这个问题XD 05/25 16:25
5F:→ GALINE: Redis 好用,不过 scale out 很麻烦... 05/25 16:28
6F:推 HwangTW: 谢谢指教 05/25 16:57
7F:推 LMGG: 认真讲解给推 05/25 20:59
8F:推 GuYueHu: 请问通常用session作帐号登入的部份会设timer吗 05/27 08:51
9F:→ GuYueHu: 还是放到session自动timeout? 这样会有安全疑虑吗 05/27 08:51
10F:→ GALINE: 看...需求?我是一下没想到什麽情况会需要登入跟session 05/27 12:46
11F:→ GALINE: 的 timeout 时间要不一样就是了 05/27 12:46
12F:推 j355066: 推 05/27 14:55
13F:推 imhaha: 借问一下~cookie可以个别设定到期的时间,session似乎没 05/28 01:53
14F:→ imhaha: 办法做到这点,只能全数清除对吧(? 05/28 01:53
15F:→ GALINE: 有「自己纪录expire time」这招,每次读值都检查一次... 05/30 11:05