V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
no13bus
V2EX  ›  问与答

thinkphp 下保持用户在重启浏览器之后,还能保持之前登录的状态,我现在是用 cookie+session 进行验证。不知道服务器端如何保持 cookie 的值。

  •  
  •   no13bus · 2014-03-04 16:12:49 +08:00 · 3661 次点击
    这是一个创建于 3700 天前的主题,其中的信息可能已经有所发展或是发生改变。
    思路大概是这样的。
    用户登录后,session['uid]赋值为用户的uid, session['username']赋值为用户的username.同时在浏览器端产生一个cookie,$aaaa=session['uid'] . ':' . session['username']
    cookie['auto']=$aaaa
    然后下次用户登录的时候检验 他的浏览器发送的cookie里面有没有auto这个key,有的话说明登录过了,直接在数据库找到,然后赋值session的相关值,让其登录。但是这样的话,不太安全。我想的是确保用户发送的cookie有auto这个key,并且cookie['auto']的值确实是
    之前的$aaaa。但是之前用户第一次登录的时候,这个$aaaa值怎么保存呢?如果不存在数据库里面,怎么才能在下次登录浏览器的时候还存在呢。用$_GLOBAL超全局变量不行呀。
    10 条回复    1970-01-01 08:00:00 +08:00
    no13bus
        1
    no13bus  
    OP
       2014-03-04 18:24:04 +08:00 via Android
    没有人知道吗?
    66beta
        2
    66beta  
       2014-03-04 18:35:13 +08:00
    貌似~~
    服务器端是session,不存cookie
    浏览器端是cookie

    cookie加密,跟服务器的session做校验?
    no13bus
        3
    no13bus  
    OP
       2014-03-05 07:34:50 +08:00 via Android
    是吗?是我问的问题太简单吗?
    zxb888
        4
    zxb888  
       2014-03-05 10:41:20 +08:00
    我最近刚做过的:用户登录检验后,把session['key']加密保存在cookie中,并在memcache中保存一个key。
    下次浏览时,把memcache保存的key与session['key']比较,如果相同,用户处在登录状态,如果不同,提示用户重新登录。使用场景类似微信登录情况。不知你是想在何场景下使用?
    no13bus
        5
    no13bus  
    OP
       2014-03-05 13:38:10 +08:00
    @zxb888 就是个论坛 类似v2ex 因为每次我打开浏览器的时候 我的v2ex都是在登录的。呵呵。那保存这个数据出了memcache,我觉得这种验证的东西只能放到数据库里面 mysql redis memcacheed。像php的$_GLOBAL是不能永久保存这个验证值的吧????有人说python的flask框架里面g变量能做到memcacheed这样的作用,重启浏览器之后还能保存着那个值。
    zxb888
        6
    zxb888  
       2014-03-05 14:20:00 +08:00
    @no13bus $_GLOBAL当然不能永久保存!!python我不懂。看你说的每次都是要登录,说明session没有起作用。估计还不太明白session的用途,建议找些session资料看看!方便的话,你把登录验证后给session赋值的程序片段贴上来看看。
    no13bus
        7
    no13bus  
    OP
       2014-03-06 21:21:25 +08:00
    @zxb888
    下面这个是每个控制器都会继承的类 也就是登陆验证时候要用到的。
    https://gist.github.com/9389531.git
    no13bus
        8
    no13bus  
    OP
       2014-03-06 21:23:15 +08:00
    重发一次 刚才格式看着不对。
    https://gist.github.com/9389531
    no13bus
        9
    no13bus  
    OP
       2014-03-06 21:25:29 +08:00
    @zxb888 这个是登陆进去之后进行的验证。
    https://gist.github.com/9389605
    zxb888
        10
    zxb888  
       2014-03-09 08:04:36 +08:00 via Android
    cookie('auto',$auto,3600);这是你每次都要登录的问题所在!
    但是你整个登录的流程存在明显的漏洞,我只要知道某用户的uid和username,我就能登录!!!
    实际上你的系统,根本用不到cookie。
    session一般来说是保存在服务器端的(也可以自己定义保存在cookie里);cookie是保存在浏览器端的。浏览器端的cookie是可以伪造的。
    建议找些php的session的资料和登录的源码先琢磨一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2911 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:57 · PVG 21:57 · LAX 06:57 · JFK 09:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.