关于 cookie 在日常开发中我们会遇到这样的需求场景: 用户在首次登录使用后,离开了这个网站(没有点击注销登录), 再次回到这个站点的时候,不需要重新登录,仍是自己上次登陆的账号信息; 我们可以使用 cookie 中存储用户的信息,并且判断是否需要加载用户信息并重新登录; php 使用 setCookie 函数来设置 Cookie 信息,但是有一点值得注意,Cookie是HTTP协议头的一部分,用于浏览器和服务器之间传递信息,
所以必须在任何属于HTML文件本身的内容输出之前调用Cookie函数。 也就是说,在 setcookie 之前不能进行输出:
1 2
| echo '我要设置 cookie了'; setCookie('value','key',time());
|
这种会造成设置 cookie 无效; 使用 cookie 实现自动登录 登陆成功后存储用户的信息: 在登录成功后通过 setCookie 设置用户信息,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public function login() { if (!empty($_POST)){ $userpsw = array( 'username'=>$_POST['username'], 'password'=>$_POST['password'], ); $info = D('userinfo')->where($userpsw)->find(); if ($info){ $re = setcookie('userinfo',md5($_POST['username']),time()+3600,'/'); $re = setcookie('password',MD5($_POST['password']),time()+3600,'/'); dump($re); echo '登陆成功'; $this->display(); }else{ echo '登录失败'; } } }else{ $this->display(); } }
|
通过 cookie 我们还可以保存用户的偏好设置信息,在用户下次访问的时候推送用户可能会感兴趣的信息; 判断是否需要自动登录 可以再模板文件中通过 js 获取 cookie 进行判断是否需要自动加载用户信息,也可以在 php 的控制其中进行判断,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <script type="text/javascript"> $(document).ready(function () { var name = getCookie('nickname'); var password = getCookie('psw'); if(name && password){ //自动登录 }else{ //手动登录 } console.log(getCookie('nickname')); }); function getCookie(c_name) { if (document.cookie.length>0) { c_start=document.cookie.indexOf(c_name + "=") if (c_start!=-1) { c_start=c_start + c_name.length+1 c_end=document.cookie.indexOf(";",c_start) if (c_end==-1) c_end=document.cookie.length return unescape(document.cookie.substring(c_start,c_end)) } } return "" } </script></script>
|