网页免登陆实现

链接:https://www.zhihu.com/question/20182967/answer/76631201
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

COOKIE由于存储在客户端,有被随意篡改的风险,所以其实服务器判断用户登陆状态,一般都是用SESSION的...SESSION的数据存储在服务器中,但是必须通过客户端的COOKIE来找到对应的SESSION
所以用户登录的过程实际上是
1:用户输入用户名密码,POST数据到服务器
2:服务器判断用户名密码是否正确,若正确,则在客户端创建一个存储SESSION_ID的COOKIE,并且在服务器中创建一个相对应的SESSION_ID的SESSION,SESSION里面的数据可能为用户的数据
3:以后该用户进行操作时,先从客户端取出SESSION_ID,找到服务器相对应的SESSION,取出数据,进行校验后再进行下一步操作..
然后说说我理解的保持登陆状态
由于COOKIE存储在客户端,所以不建议用isset($_COOKIE[‘username‘])来判断用户是否登陆.
因为用户完全可以伪造一个COOKIE,来达到欺骗服务器的目的...
那么,我想到的两种方法是:
1:上面有人说了,存储username和加密的密码,再次访问时,服务器取出COOKIE数据,与数据库做校对,如果通过,则判断为已经登陆
2:建立一个MySQL表,里面存cookie_id,username,expire,time,然后每次登陆时,根据用户选择保存登陆时间,来生成一个md5加密的cookie_id(可以用username,时间戳和随机数生成),然后将cookie_id,username,用户保持的登陆时间,当前时间戳一起插入数据库中,并且创建一个名为cookieid,值为上述md5加密的cookie_id的COOKIE.
那么下一次用户访问时,服务器可以先取COOKIE,根据COOKIE里的cookieid找到相对应的数据库中的数据,判断有无合法COOKIE,有无生命周期等...如果全部通过就能判定为登陆了

时间: 2024-12-29 23:22:45

网页免登陆实现的相关文章

CAS增加免登陆(Remember Me)功能

1. 打开deployerConfigContext.xml 在 authenticationManager 的bean中增加 <property name="authenticationMetaDataPopulators"> <list> <bean class="org.jasig.cas.authentication.principal.RememberMeAuthenticationMetaDataPopulator" /&g

Kerberos 互信免登陆

第一步:机器加互信 将机器A的Kerberos name加到机器B的~/.k5login中,同时将机器B的Kerberos name加到机器A的~/.k5login中 例如:host/[email protected] 第二步:使用默认的Kerberos账号登录(先注销再用krb5.keytab登录) kdestroy kinit -kt /etc/krb5.keytab 然后就可以免登陆,ssh IP登录到对方机器了 (如果互信用的不是机器的Kerberos账号,就kinit互信的Kerber

linux 免登陆设置

免登陆 (进入到虚拟机,以root方式登陆) vi /etc/ssh/sshd_config (要确保这些字符前无注释符号“#”) RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes PeimitEmptyPasswords yes 执行 ssh-agent bashssh-keygen -t rsa ssh-add /r

七天免登陆

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <script type="text/javascript">//        var _str='{"key":"value"}';//  

SSH免登陆(配置)

ssh 可以实现免登陆,无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 一)准备工作     主机node1,node2,node3 修改主机名(vi  /etc/sysconfig/network) 192.168.9.11 node1 192.168.9.22 node2 192.168.9.33 node3 二)查看ssh命令(使用node1生成公钥)     ssh -version 如果没有安装 yum -y insta

使用 scp命令免登陆

多台服务器之间互相拷贝文件一般常用scp命令但是让人困扰的是还要输入密码, 能不能不输入密码直接拷贝? 所幸方法是有的,ssh服务是支持免登陆的,不过需要密钥文件 方法如下: [[email protected] ~]# ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty fo

IOS 记录用户登陆状态 第二次免登陆

NSUserDefault是苹果提供给我们用来存储用户的登陆信息的持久化类.下面用实例看下记录登陆状态的过程 首先创建用于存取用户信息的方法类 HRAccountTool.h: #import <Foundation/Foundation.h> @interface HRAccountTool : NSObject /** * 存储账号信息 * @param account 需要存储的账号信息:第一个值为用户名:第二个值为密码 */ + (void)saveAccount:(NSArray *

接入钉钉企业免登陆遇到的坑!!!!

今天接入免登陆遇到个大坑,看官方文档上写了,先引入dingtalk.js, 然后配置dd.config({...}) 接着dd.ready(function(){ .......... }); 问题出现了,dd.ready 怎么也不运行,折腾了一下午,就差跪下来求他了,最后一个不经意的删除dd.config({}),奇迹出现了, dd.ready 执行了!!!!苍天估计被我这种不屈不挠的精神所感动,故意暗中帮了我一把,这才得以将问题解决. 这是下面代码: dd.error(function(er

Centos 集群配置SSH免登陆脚本

首先编写脚本生成集群服务器列表: hostsList.sh #!/bin/bash preIp="11.11.225." pwd="dyj2017" for i in `seq 2 80`; do echo -e $preIp$i $pwd >> hostsLists.txt done hostsLists.txt 11.11.225.2 dyj2017 11.11.225.3 dyj2017 11.11.225.4 dyj2017 .... 11.11