关于用户session和cookie的思考--三种登录状态--上

文章目录

    • 设置一个cookie过期时间,在cookie没有过期但是session过期的时候可以直接登录生成新的session,除非用户主动退出,这时候需要清除cookie信息
    • 私人电脑可以使用localStorage在浏览器设置保存自己多次登录的不同用户身份和密码,在cookie过期的时候依然可以记住密码直接登录
    • 在公共电脑,不登录直接进入,不适应用户名和密码直接进入的时候是需要清除cookie里的用户信息防止误用的
    • localStorage的使用
    • 使用localStorage处理一个登录页面实现在一个复选框不勾选的时候,设置localStorage里的用户名和密码是空,勾选的时候存入
    • cookie的存取,设置使用时限和删除
    • 获取session里的用户名等相关信息
    • 登录跳转页面的部分处理
    • modelandview
    • google的Polymer框架(ui框架)
    • localStorage和sessionStorage的加解密
    • 禁用浏览器的自动填充功能
    • Chrome里用户云密码保存--自动填充功能
    • cookie和localStorage的区别

session在服务器端保存,是占用服务器内存资源的,所以一旦用户下线的时候需要迅速释放来释放内存资源,一般时限是用户持续操作结束之后延续15min,使用session.timeout设置

在这个期间用户在整个应用的所有操作都是在同一个服务器session里进行,超过这个时间,保存在用户浏览器里的cookie里的用户名和密码会触发服务器再次开启一个新的session

所以需要在cookie里设置一个cookie的保存期限,在这个时间里自动向服务器请求新的session,所以cookie的时间不可以设置的太短,在用户还没有登出的时候失效

虽然微软说session最多占用6K数据,但是在它的保存期间,每次访问都会对其他session造成线路访问,也是很占用服务器与网络资源的,所以超大网站一般很少使用(有的用cookie代替session)(非门户网站一般可以用)

session里一般只保存少量的用户信息,比如身份信息,登录状态,个性配置,权限列表和一些通用数据(一般把通用的,频繁存取的小数据放到session)

session主要是为了延续会话状态,因为http是无连接的,所以在同一个应用即使登录之后,每一次请求也无法通过请求知道上一次请求的对话内容,所以服务器在用户第一此请求的时候开启一个session对象,里面是用户常用信息和这次对话的历史内容,cookie里保存的sessionID在每次发送给服务器请求的时候可以知道服务器里对应的session,所以cookie里只有一次通信服务器就会发送sessionId存储到cookie里,服务器在获取sessionId之后会从现有session里找,找到就作为这次的通信session,找不到就在创建一个之后把新的sessionid放进去,(session默认需要cookie这种保存机制的配合)

用户名和密码一般存在session里就好了,不要存到cookie里(保密性差)
从cookie里读取sessionId,根据sessionID获取session里的用户信息
所以登录页面需要有三个登录功能:

设置一个cookie过期时间,在cookie没有过期但是session过期的时候可以直接登录生成新的session,除非用户主动退出,这时候需要清除cookie信息

cookie里的sessionID可以保持在session会话时间里用户能一直使用信息,cookie里的用户名和密码可以让用户在session过期但是cookie还没有过期的情况下使用cookie里的用户名和密码直接登录

1.所以在session过期的时候会需要用户名和密码建立新的session,为了密码安全性,一般不用cookie放用户名和密码,直接使用session里的

2.也可以只在cookie里保存用户名,设置一个保存时间,之后自动登录的密码从localStorage里获取(不过会存在有些密码登录的时候没有点击保存密码这个选项会不存在在localStorage里,所以可以设置在找不到密码的时候进行提示然后自动进入登录页面)
3.不担心安全问题可以在cookie里直接存入密码并设置过期时间

私人电脑可以使用localStorage在浏览器设置保存自己多次登录的不同用户身份和密码,在cookie过期的时候依然可以记住密码直接登录

localStorage和sessionStorage
localStorage–没有时间限制的数据存储
sessionStorage–针对一个session的数据存储
这两个以前都由cookie完成,但是cookie不适合大量数据的存储(多个用户名和密码),cookie里每个cookie的存储空间是4k,localStorage一般普通浏览器都支持5M大小
localStorage
目前的浏览器都是先定位string类型,所以遇到json类型需要一些转换
localStorage不能被Python抓取所以安全性还可以
localStorage在浏览器的隐私模式是不可读取的,依然需要输入密码
localStorage永远存在,所以只适合私人电脑
(详情看localStorage的使用)
sessionStorage
也是用户端浏览器的,不过是保存期限的问题,sessionStorage里的东西是在用户在本地浏览器关闭该网站的所有tab之后消失

sessionStorage和localStorage都只能在前端使用js操作,但是cookie因为每次都是可以在http里携带传入给后端的(而且遵守http机制)所以在后端和前端都可以操作

在公共电脑,不登录直接进入,不适应用户名和密码直接进入的时候是需要清除cookie里的用户信息防止误用的

localStorage的使用

使用localStorage的时候,需要先判断一下浏览器是否支持,有三个写入方式

if(!window.localStorage){
   
        alert("浏览器不支持localStorage");
    }else{
   
        var storage = window.localStorage;
        // 写入a字段
        storage["a"] = 1;
        // 写入b字段
        storage.b = 2;
        // 写入c字段
        storage.setItem("c",3);//官方推荐使用   
    }

localStorage的使用遵循同源策略,不同的网站是不能直接共用相同的localStorage

改的方法相当于直接赋值

storage.setItem("a",3);
storage.a = 4;
console.log(storage.a); 

读取也是三个方式

            //第一种方法读取
            var a=storage.a;
            console.log(a);
            //第二种方法读取
            var b=storage["b"];
            console.log(b);
            //第三种方法读取
            var c=storage.getItem("c");
            console.log(c);

删除的方法有两种情况
将localStorage的所有内容清除

storage.clear();

将localStorage中的某个键值对删除

storage.a = 1;
storage.removeItem("a");

loaclStorage的键获取

for(var i=0;i<storage.length;i++){
   
    var key = storage.key(i);
    console.log(key);
}

一般会将JSON存入localStorage中,但是在localStorage会自动将其转换成string类型
使用JSON.stringify()方法将JSON转换为JSON字符串
先把json变成json字符串之后在作为键值存入到window.localStorage里

if(!window.localStorage){
   
    alert("浏览器不支持localStorage");
}else{
   
    var storage = window.localStorage

你可能感兴趣的:(笔记)