精华内容
下载资源
问答
  • 38.状态保持之Session详解

    千次阅读 多人点赞 2021-09-06 22:39:12
    引言——上文讲的是cookie,但是...客户端与服务端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务端存储与会话有关的数据。 存储方式包括cookie,session,会话一般指session对象。 使用cookie,所有数据.

    引言——上文讲的是cookie,但是cookie的键和值都是明文的形式存储在客户端浏览器上,很不安全!
    那有没有更好些的来存储登录状态的方式呢???
    这就需要讲讲session了!

    1.状态保持——cookie和session:

    1. http协议是无状态的:每次请求都是一次新的的请求,不会记得之前通信的状态。
    2. 客户端与服务端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务端存储与会话有关的数据。
    3. 存储方式包括cookie,session,会话一般指session对象。
    4. 使用cookie,所有数据存储在客户端,注意不要存储敏感信息。
    5. 使用session方式,所有数据存储在服务器端(以键值对形式存储),在客户端cookie中存储session_id,用户的重要信息是不会存储在客户端的,下次用户登录只需校验session_id即可,安全!!!
    6. 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据。
      注意:不同的请求者之间不会共享这个数据,与请求者一一对应。
    session依赖于cookie!!!

    2.来讲讲session的由来:

    • Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。这就是Session。

    • 问题来了,基于HTTP协议的无状态特征,服务器根本就不知道访问者是“谁”。那么上述的Cookie就起到桥接的作用。

    • 我们可以给每个客户端的Cookie分配一个唯一的id(sessionid),这样用户在访问时,通过Cookie(获取其内的sessionid值),服务器就知道来的人是“谁”。然后我们再根据不同的Cookie的sessionid,在服务器上保存一段时间的私密资料,如“账号密码”等等。

    • 总结而言:Cookie弥补了HTTP无状态的不足,让服务器知道来的人是“谁”;但是Cookie以文本的形式保存在本地,自身安全性较差;所以我们就通过Cookie识别不同的用户,对应的在Session里保存私密的信息以及超过4096字节的文本。

    • 另外,上述所说的Cookie和Session其实是共通性的东西,不限于语言和框架。

    3.Session的特点:

    1. session是以键值对进行存储的。

    2. session依赖于cookie。唯一的标识码保存在sessionid cookie中。

    3. session也是有过期时间。

    4.讲一讲Session流程:

    1. 当用户登录以后,生成一个字典{key, value},将字典存入服务端session,key是自动生成的一段字符串标识,配合value是一个自定义格式的字典类型,返回cookie保存到用户浏览器端
    2. 在1步骤生成的字典value中自定义格式来存储用户的信息,如user信息,iflogin等。
    3. 当我们在django中用到session时,cookie由服务器端随机生成,写到浏览器的cookie中。每个浏览器都有自己的cookie值,是session寻找用户信息的唯一标识。每个浏览器请求到后台接收的request.session等价于在1中session字典的key(cookie)对应的value。这样我们就能识别出用户,并判断其状态!

    作者:Aiden  Yun

    5.实战使用——分三步走来操作一波:

    (注: 使用session之前需要先执行makemigrations,migrate的模型映射文件命令,在数据库中有生成django_session的表)

    第一步:使用之前确保项目目录下的settings.py文件中已经配置好下面两个地方!

    在这里插入图片描述

    第二步:通过观察可知,在我们的数据库中已经映射了对应的表!

    查看表结构发现:其中有三个字段,分别是:

    • session_key(就是上面所说的session_id);
    • session_data(就是对应的用户的隐私数据);
    • expire_date(就是session的过期时间)

    在这里插入图片描述

    在这里插入图片描述

    第三步:session的简单操作(设置;服务端获取;删除)

    启用会话后,每个HttpRequest对象将具有一个session属性,它是一个既可读又可写的类似于字典的对象,表示当前的会话。

    • get(key, default=None):根据键获取会话的值
    • flush():删除当前的会话数据并删除会话的Cookie
    from django.views import View			#使用类视图,要导入!
    from django.http import HttpResponse
    
    class Test08(View):
        def get(self,request):
            #对session的设置
            request.session["name"] = "xiaoming"
            request.session.set_expiry(100)       #设置过期时间,单位为秒。到时间则自动删除。 (比如你网页登录12306,多久时间内再次登录可不用重新登录!)
    
            # 对session的访问,只能在服务端获取!
            name = request.session.get("name","未登录")        #第二个参数为默认值。如果获取的键不存在则显示默认值。
            print(name)
    
            # 对session的删除                      #(比如网页中登录12306之后,你退出!)
            request.session.flush()
    
            return HttpResponse("完成!")
    

    注意:
    观察可知:客户端中存储的cookie中有sessionid键值对(但是没有值,即不会存储用户的隐私数据),而sessionid的值刚好与服务端中session表中的session_key值相同!(用户的隐私数据是仅仅存储在服务端中的,安全哦!)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    拓展——会话过期时间细谈:

    第一种设置的方法:

    • set_expiry(value):设置会话的超时时间
    • 如果没有指定,则两个星期后过期
    • 如果value是一个整数,会话将在values秒没有活动后过期
    • 若果value是一个imedelta对象,会话将在当前时间加上这个指定的日期/时间过期
    • 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
    • 如果value为None,那么会话永不过期
      在这里插入图片描述

    第二种设置的方法:
    (settings.py文件中的配置;可以不配置,那么都是默认的选项)

    在这里插入图片描述

    ❤️可以扫码关注本人公众号——任何问题都可在公众号提问(定时有专人解答);并且不定时更新干货文。欢迎关注哦!❤️

    请添加图片描述

    展开全文
  • iOS 利用token保持登陆状态

    千次阅读 2017-05-08 09:29:25
    项目里,需要在客户登陆后保持登陆状态。使用的不是存储用户名和密码,每次去模拟登陆。 而是登录时,登陆成功,从服务器接收token,token是服务器生成的一个字符串,唯一标识一个用户,并且会在一段时间后销毁,...

    项目里,需要在客户登陆后保持登陆状态。使用的不是存储用户名和密码,每次去模拟登陆。
    而是登录时,登陆成功,从服务器接收token,token是服务器生成的一个字符串,唯一标识一个用户,并且会在一段时间后销毁,所以我们很久不登录APP,会要求重新登录。

    利用一个工具类,进行token的存储、删除和读取。登陆成功进行存储、下一次打开APP进行读取、退出进行删除。

    如果,有refreshtoken,可以进行跟新,就不用再次登录。

    代码如下:

    
    #import "GCTokenManager.h"
    
    NSString *const TOKEN_KEY = @"token";
    
    
    @implementation GCTokenManager
    
    // 存储token
    +(void)saveToken:(GCToken *)token
    {
        NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
        NSData *tokenData = [NSKeyedArchiver archivedDataWithRootObject:token];
        [userDefaults setObject:tokenData forKey:TOKEN_KEY];
        [userDefaults synchronize];
    }
    
    // 读取token
    +(GCToken *)getToken
    {
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        NSData *tokenData = [userDefaults objectForKey:TOKEN_KEY];
        GCToken *token = [NSKeyedUnarchiver unarchiveObjectWithData:tokenData];
        [userDefaults synchronize];
        return token;
    }
    
    // 清空token
    +(void)cleanToken
    {
        NSUserDefaults *UserLoginState = [NSUserDefaults standardUserDefaults];
        [UserLoginState removeObjectForKey:TOKEN_KEY];
        [UserLoginState synchronize];
    }
    
    
    // 跟新token
    +(GCToken *)refreshToken
    {
        return nil;
    }

    这里的GCToken 是服务器端返回的token的模型,要根据自己项目中返回的JSON自定义。

    展开全文
  • 问题:由于wx.request()发起的每次请求对于服务器来说都是不同的会话(wx.request()请求是先经过微信服务器再到达我们的服务器),这样导致后续请求都相当于未登录的状态。解决方案:session信息存放在cookie中以...

    问题:由于wx.request()发起的每次请求对于服务器来说都是不同的会话(wx.request()请求是先经过微信服务器再到达我们的服务器),这样导致后续请求都相当于未登录的状态。


    解决方案:

    session信息存放在cookie中以请求头的方式带回给服务端

    JSESSIONID=***;

    小程序有提供对请求头的支持


    流程:

    1、在用户登录时,服务器将会话sessionId返回到客户端(小程序)

    HttpSession session = request.getSession();
    Sting sessionId = session.getId();

    2、小程序保存session到storage(全局变量app.js),在之后的每一次请求中都携带请求头sessionId

    /*保存到storage*/
    wx.setStorage({
      key: 'sessionId',
      data: 'JSESSIONID='+res.data.sessionId,
      success: function (res) {
        console.log(res)
      }
    })
    
    /*保存到app.js*/
    App({
      onLaunch: function () {
        
      },
      globalData: {
        header: { 'Cookie': 'JSESSION=***' }
      }
    })
    
    getApp().globalData.header.Cookie = 'JSESSIONID=' + sessionId;/*服务端返回的消息*/

    请求中带上请求头:sessionId

    var header = getApp().globalData.header; //获取app.js中的请求头
    wx.request({
      url: "****",
      header: header, //请求时带上这个请求头
      success:function(res){
      }
    })
    
    //获取storage中的请求头
    getCheckLoginFlag:function(){
        var loginFlag = wx.getStorageSync('loginFlag')
        var sessionId = wx.getStorageSync('sessionId')
        if (typeof (loginFlag)!="undefined"){
          wx.request({
            url: '***',
            data: {
              loginFlag: loginFlag
            },
            header: {
              'content-type': 'application/json',
              'Cookie': sessionId
            },
            success: function (res) {
              console.log(res)
            }
          })
        }
      }


    展开全文
  • 学校的一次实训中,老师要求我们将项目部署到服务器上,并且能够一直运行。什么意思呢?...最后运行脚本文件即可: sh bili.sh 如果想结束运行状态,先查看进程 ps -ef | grep java kill -9 32061 大功告成~~~

    学校的一次实训中,老师要求我们将项目部署到服务器上,并且能够一直运行。什么意思呢?简单来说我们将项目部署到服务器上,并且成功启动了,每个人可以通过服务器地址浏览,但是此时如果我们关闭了控制运行服务器的工具(Xshell),或者电脑蓝屏等意外情况,项目就跑不起来了。就好比在IDEA或者其他工具运行项目的时候,如果我们关闭此类工具,项目也就跑不起来。

    跳过项目打包,我将jar包放入了home目录。(jar包的名字可以重新命名,以免后面写脚本的时候忘记名字。)
    在这里插入图片描述
    1.这里我们先安装nohup,一般情况下会被安装到 /usr/bin目录下

    yum install coreutils
    

    2.安装完成之后,配置nohup

    vi ~/.bash_profile
    // 进入此文件后,在PATH=$PATH:$HOME/bin添加:/usr/bin
    

    在这里插入图片描述
    3.生效配置

    source ~/.bash_profile 
    

    4.接着我们需要编写脚本文件,在home目录下创建一个以.sh后缀的文件。命令:touch bili.sh(bili是文件名字),创建完成之后进行编辑vi bili.sh,编辑内容如下:

    # !/bin/sh
    nohup java -jar /home/test-0.0.1-SNAPSHOT.jar &
    

    这里我在jar包前面加了目录名字home
    在这里插入图片描述
    保存退出。
    5.最后运行脚本文件即可:

    sh bili.sh
    

    如果想结束运行状态,先查看进程

    ps -ef | grep java
    

    在这里插入图片描述

    kill -9 32061
    

    大功告成~~~

    展开全文
  • Vue登录注册,并保持登录状态

    千次阅读 多人点赞 2018-12-19 21:46:54
    关于vue登录注册,并保持登录状态,是vue玩家必经之路,网上也有很多的解决方法,但是有一些太过于复杂,新手可能会看的一脸懵逼,现在给大家介绍一种我自己写项目在用而且并不难理解的一种方法。 项目中有一些路由...
  • android 保持屏幕唤醒状态

    千次阅读 2013-04-01 16:28:29
    android保持屏幕唤醒状态   protected void onCreate(Bundle icicle) {  super.onCreate(icicle);  getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);  } 简单来说就是把...
  • 但是我怎么保持一个登陆的状态呢? 不能每次都去用户授权啊;肯定不是这样的 然后我想到了 在微信浏览器里面写入登陆的cookie 存入了openid; 然后将access_toke 存入 redis里面 ,然后每次取cookie来验证是否...
  • 项目需要实现一个功能效果,要保持被选中条目的选中状态,其余的都保持未被选中的状态:如图:
  • 这几天工作中需要用到这功能,因为我做后端的,所以和往常一样,前端的东西我都会...所以自己打算写一个,虽然我产专业的前端,但还是略知一二。 使用的技术 localStorage.setItem(key,val); localStorage.getIt...
  • 这几天在做公司的项目,有这样一个需求,就是在listView里,点击item子项的时候需要保持item子项的选中状态,上网搜了一些资料,最后也实现了。现在就记录下来,一方面方便以后自己回顾好复习温故,另外也和大家分享...
  • 怎样每天保持饱满的精神状态

    千次阅读 2015-12-20 21:49:13
    怎样才能每天保持饱满的精神状态去工作和学习呢? 相信这是很多人都想去做到的事情,我自己也正在摸索当中。下面就写一些自己的心得,顺便把自己今年剩余的这点时间做一个简单有效的规划。 最近很多事情牵绊住了我...
  • 现状,当不管电源适配器(充电器)有没有和电脑连接,右上的电池图标一直保持充电状态,这个问题的解决 解决方案: 可以做一下smc和pram reset; 1,关机,断开所有数据线和电源线。 2,在关机的情况下同时按住...
  • ASP.NET保持用户状态的九种选择

    千次阅读 2004-10-24 22:15:00
    2003-06-10■陶刚编译■yesky摘要:ASP.NET为保持用户请求之间的数据提供了多种不同的途径。你可以使用Application对象、cookie、hidden fields、Sessions或Cache对象,以及它们的大量的方法。决定什么时候使用它们...
  • 用CSS轻松实现,当盒子的宽度为百分比时,盒子的高度和宽度始终相等,保持正方形状态,实现页面自适应
  • 使用TCP keepalive来保持长连接状态显然要舒服一些,直接调用系统的API即可实现,对于系统而言负担也更轻(相对第一种办法)。 以下是windows下TCP keepalive设置的函数: /*@author super bert 2014-12-16*/ /*...
  • 在微信小程序开发中,由wx.request()发起的每次请求对于服务端来说都是不同的一次会话,... 注意,这里的session不是小程序维护的那个通过wx.login()方法维护的session,而是我们自己的服务端的session。 由于正常...
  • ASP.Net中的四种状态保持机制

    千次阅读 2012-07-20 00:21:42
    这几天在学ASP.Net (就是传说中最难的...今天来说说ASP.Net中的4种状态保持机制 状态保持机制?神马意思? 别急 且听我下面慢慢道来 每个人上网可多有过这样的情况  当我们登陆某个网站时 在登陆的旁边会有一个
  • web项目中登陆状态保持的三种方式

    千次阅读 2018-08-13 15:25:01
    例子有cookie和session的demo, 1、Cookie 2、Session 3、Token (1)、token也...后台也可以实现头字段的Value和用户信息之间的一 一对应关系,自己维护上面的关系 (2)、现成jar的例子 资源都是5分 ,多了私聊我 修改
  • 微信小程序登陆及登陆状态保持

    千次阅读 2019-04-19 00:07:19
    'status' => 500, /* 返回状态,200 成功,500失败 */ 'message'=> "非法访问" ); exit; } } } //echo "初始化成功"; }} public function get_result(){ $this->login(); return ...
  • 如何你的App永远在后台存活:对Android进程守护、闹钟后台被杀死的研究。 最近公司要求要做一个提醒功能,一说到提醒,那肯定就和闹钟差不多的意思,那么肯定就要用到AlarmManager。 但是,我们知道,android...
  • TreeView父子联动效果保持节点状态一致

    万次阅读 热门讨论 2005-02-02 18:01:00
    我们大部分都用过TreeView控件,对这个控件的评价也是各式各样的,但是我觉得不论如何... 希望微软可以早日将这个功能添加到TreeView控件中,最好也能实现多态的树结构。请浏览blog的相关评论,我会在评论中更新文章!
  • airflow 被调度后,一直处于 running 状态假死,而且日志打印不完全,从某一行以下就不会打印日志了。 2. 错误原因 经过查找源码中从这一行打印的日志来看,因为在日志里面输出了中文的字符串(包括中文的括号...
  • 很多朋友都困扰着一个问题,Mac自动休眠后无法继续保持下载,今天小编分享的就是Mac自动休眠后继续保持下载的设置方法。 首先系统偏好设置 - 节能 里按自己需要选择好,这里不再赘述,很多帖子解释都很清楚。 但是...
  • 以上两种方法当控件失去焦点后被选项的背景颜色会成灰色,不同的系统主题显示不一样,有时候与未选中项很像,仔细看不太明显,因此可以用下面的方法自己设置各种颜色 二. 重载OnNMCustomdraw或OnCustomdraw函数 ...
  • 本周专题分为两个部分,第一部分是横竖屏切换的相关问题,第二部分是Activity中View状态保持。 横竖屏切换 一、横竖屏切换时Activity的生命周期 1、启动Activity(竖屏时启动的) 11-01 01:48:17.144: I/a2bgeek...
  • 首先需求是这样的,用户打开小程序,只有在登录的情况下根据...第一种方式:调用自己的后台的登录方式进行登录 小程序的js页面的登录方法 primary: function () { var that = this wx.request({ url: ‘http...
  • 一、菜单项激活状态保持 有时,我们在项目中会有这样一个需求,即实现 一个侧导航栏,点击不同的菜单项,右边内容会跟着变化,而页面手动刷新后想要使菜单激活状态保持,那么这个功能该如何实现呢? 现在给出以下...
  • 无法向会话状态服务器发出会话状态请求。请确保已启动 ASP.NET State service,并且客户端和服务器端口保持相同。无法向会话状态服务器发出会话状态请求。请确保已启动 ASP.NET State service,并且客户端和服务器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 608,413
精华内容 243,365
关键字:

怎么让自己保持最好的状态