使用cookie做用户登录的过程详解
来源:互联网 发布:淘宝下载 编辑:程序博客网 时间:2024/05/17 09:37
不管是游戏,还是网站,最基本的功能,就是用户注册登录。
或许,我们做过多次用户的登陆注册的功能,但我们是否想过,为什么要实现用户的登录。用户怎样做才算登录成功。
对用户而言,登录后,就有了他的一片“天地”,例如,登录CSDN后,就可以管理自己的博客,否则,你没有权利管理。关于是否登录成功的问题,在用户看来,如果用户名和密码输入成功,就算登入成功,否则,登录不成功。
但这一切,在程序中是怎样实现的呢?在程序中,怎样判定这个用户处于登录状态,怎样判断用户是否有权利访问某个URL,例如管理自己的博客。
为了搞清楚上面的问题,需要我们了解的一个知识点是,HTTP协议实际上是无状态的,非持久连接。也就是说,你第二次通过某个浏览器访问WEB应用,他其实不知道你已经来过一次了。
这里,有一个问题就是,我们的需求是需要知道用户“是否登录”了,即当这个用户登录后,第二次访问的服务器的时候,服务器需要知道请求是来自同一个用户,可是,由于HTTP协议是无状态的,服务器无法知道两次访问是不是来自同一个人。
这里就使用到COOKIE技术了,使用COOKIE可以解决以上问题,让服务器知道用户是否登录。
cookie是什么?
cookie是一个文本文件,保存在客户端硬盘中(如果设置了cookie的过期时间),或者在用户的浏览器内存中(如果cookie是临时的)。这个文件对用户来说,是透明的,你可以通过浏览器工具来查看当前的cookie,可能不止一个。
cookie是什么时候被保存在浏览器中的?
这个问题很重要,浏览器的cookie值不会凭空产生。它是服务器端通知客户端的产生的。如果用户浏览器支持COOKIE,使用下面一段代码就可以创建COOKIE。
$path: 千万不要把这个路径理解为cookie的保存路径,如果不设置,则路径为目录,服务器中的所有脚本都可以访问到,The path on the server in which the cookie will be available on. If set to '/', the cookie will be available within the entire domain
$domain: 表示这个cookie所属的域,cookie是不能跨域访问的。
例如:
当用户第一次访问这段程序的时候,setcookie函数会生成cookie文件,并保存在浏览器的response Header,注意,这个时候,如果访问服务器中的全局数据$_COOKIE,会发现这个数组为空。此时,客户端还没有把cookie信息传到服务器端。
浏览器还没有保存这个cookie
当第二次访问这个页面的时候,这个时候,浏览器会自动把cookie信息传到服务器端(如果这个cookie没有过期的话)。这样,服务器才保存了这个cookie。
服务器中,如果获取到这个cookie值?
在PHP中,任何从客户端传过来的cookie都可以保存在$_COOKIE这样的全局函数中。在服务器端,可以通过这个数组来访问cookie的信息。记住,第一次读取它的信息的时候,并不会生效。原因就是我上面说的。
那么我们怎么利用cookie实现用户登陆呢?
流程图:
使用COOKIE保存用户的TOKEN值。这样,服务器会读取保存在$_COOKIE数组里面的信息判断用户是否登陆。
代码展示:
登陆时,当用户输入正确的用户名和密码后,需要调用下面的代码:
为什么登陆成功后,都要更新用户的TOKEN值呢?
防止,如果用户A的token值一直都更新,被用户B窃取,这样,用户B伪造COOKIE,如使用浏览器直接添加一个COOKIE,这样可以直接登陆用户A的账号,绕过了用户名和密码的验证。
第二,就是保证一个账号只能是一个用户登陆。
在控制器的入口处检查用户是否登陆:
其中 getUserByToken()函数就是根据保存在COOKIE里面的token值来查找用户,如果查找到,说明这个用户已经登陆,否则未登陆。
注意一点:在登陆的时候,除了使用cookie保存以外,还可以使用session,但是,为什么我们还少使用session做登陆注册呢,因为session的值是保存在服务器中的,在一些大型的应用中,服务器可能不止一台,所以,无法知道,用户注册的session保存在哪台服务器上。
但是,记住一点就是,session可以保存在memcached中。这里需要修改PHP.INI配置文件。
- 使用cookie做用户登录的过程详解
- 使用cookie做用户登录的过程详解
- destoon 的登录过程,如何使用cookie来判断用户是否登录
- 使用cookie保存用户的登录名
- 使用cookie完成用户自动登录
- 使用Cookie存取用户登录信息
- Android 使用.net开发的webservice做用户登录验证
- 微信小程序中做用户登录与登录态维护的实现详解
- jsp Cookie记住用户的登录状态
- 轻松拿到登录用户的cookie
- cookie:记住用户登录时的用户名
- cookie:记住用户登录时的用户名
- 用户登录中Cookie的简单应用
- **Cookie的用户登录与记录**
- php 基于cookie的用户登录验证
- 基于cookie的用户登录模块
- 使用cookie实现浏览器自动登录详解
- jsp cookie 用户登录
- HDU-5889 Barricade(最小割或最短路+最小割)
- POJ1008-Maya Calendar
- 通过servlet来建立一个登录界面并为成功界面设置权限
- 排序算法(五):冒泡排序
- Java内存区域与内存溢出异常
- 使用cookie做用户登录的过程详解
- 初识Spring框架(一)
- 数据库事务的四大特性
- Spring事务配置的五种方式--很好的总结
- mysql千万级数据库插入速度和读取速度的调整记录
- 第三方库、SDK混淆总结
- spring cloud准备linux常用命令
- 【2017.9.16周总结】
- JSP(4)内置对象&动作标签