精华内容
下载资源
问答
  • shiro实现APP保持登录状态,以及web统一登录认证和权限管理,会话保持web和APP之间。转载:https://blog.csdn.net/gaofeihu_/article/details/79447922

    shiro实现APP保持登录状态,以及web统一登录认证和权限管理,会话保持在web和APP之间。

    转载:https://blog.csdn.net/gaofeihu_/article/details/79447922

    展开全文
  • django web 项目 登录状态保持 cookie

    千次阅读 2018-03-27 23:14:55
    Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。...

    Cookie

    Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型记住用户名。

    Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用。

    Cookie的特点

    • Cookie以键值对的格式进行信息的存储。
    • Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的Cookie信息。
    • 当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器。

    典型应用:记住用户名,网站的广告推送。

    说明:点击示例网址,这些广告推送的商品是基于你曾经在淘宝上点击的商品类别等条件筛选出来的,看上去这是在凤凰网上访问淘宝网的Cookie,但是事实不是这样的,一般是采用iframe标签嵌套一个淘宝的广告页面到凤凰网的页面上,所以淘宝的Cookie并没有被凤凰网读取到,而是依然交给淘宝网读取的,可以通过"开发者工具"查看元素,如下图:

    接下来讲解如何在Django中实现Cookie的读写。

    设置Cookie

    1)打开booktest/views.py文件,创建视图cookie_set。

    def cookie_set(request):
        response = HttpResponse("<h1>设置Cookie,请查看响应报文头</h1>")
        response.set_cookie('h1', '你好')
        return response
    

    2)打开booktest/urls.py文件,配置url。

        url(r'^cookie_set/$',views.cookie_set),
    

    3)在浏览器输入如下网址。

    http://127.0.0.1:8000/cookie_set/
    

    在"开发者工具"中可以在响应头中查看到设置的Cookie信息。

    读取Cookie

    Cookie信息被包含在请求头中,使用request对象的COOKIES属性访问。

    1)打开booktest/views.py文件,创建视图cookie_get。

    def cookie_get(request):
        response = HttpResponse("读取Cookie,数据如下:<br>")
        if 'h1' in request.COOKIES:
            response.write('<h1>' + request.COOKIES['h1'] + '</h1>')
        return response
    

    2)打开booktest/urls.py文件,配置url。

        url(r'^cookie_get/$',views.cookie_get),
    

    3)在浏览器输入如下网址。

    http://127.0.0.1:8000/cookie_get/
    

    4)打开“开发者工具”,在请求头中可以查看Cookie信息,浏览效果如下图:


    展开全文
  • django web 登录状态保持 session

    千次阅读 2018-03-27 23:15:56
    在服务器端进行状态保持的方案就是Session。启用SessionDjango项目默认启用Session。打开test3/settings.py文件,在项MIDDLEWARE_CLASSES中启用Session中间件。禁用Session:将Session中间件删除。存储方式打开test3...

    Session

    对于敏感、重要的信息,建议要储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息。

    在服务器端进行状态保持的方案就是Session。

    启用Session

    Django项目默认启用Session。

    打开test3/settings.py文件,在项MIDDLEWARE_CLASSES中启用Session中间件。

    禁用Session:将Session中间件删除。

    存储方式

    打开test3/settings.py文件,设置SESSION_ENGINE项指定Session数据存储的方式,可以存储在数据库、缓存、Redis等。

    1)存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式。

    SESSION_ENGINE='django.contrib.sessions.backends.db'
    

    2)存储在缓存中:存储在本机内存中,如果丢失则不能找回,比数据库的方式读写更快。

    SESSION_ENGINE='django.contrib.sessions.backends.cache'
    

    3)混合存储:优先从本机内存中存取,如果没有则从数据库中存取。

    SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
    

    4)如果存储在数据库中,需要在项INSTALLED_APPS中安装Session应用。

    5)迁移后会在数据库中创建出存储Session的表。

    6)表结构如下图。

    由表结构可知,操作Session包括三个数据:键,值,过期时间。

    依赖于Cookie

    所有请求者的Session都会存储在服务器中,服务器如何区分请求者和Session数据的对应关系呢?

    答:在使用Session后,会在Cookie中存储一个sessionid的数据,每次请求时浏览器都会将这个数据发给服务器,服务器在接收到sessionid后,会根据这个值找出这个请求者的Session。

    结果:如果想使用Session,浏览器必须支持Cookie,否则就无法使用Session了。

    存储Session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息,进行了base64编码,过期时间由开发人员设置。

    对象及方法

    通过HttpRequest对象的session属性进行会话的读写操作。

    1) 以键值对的格式写session。

    request.session['键']=值
    

    2)根据键读取值。

    request.session.get('键',默认值)
    

    3)清除所有session,在存储中删除值部分。

    request.session.clear()
    

    4)清除session数据,在存储中删除session的整条数据。

    request.session.flush()
    

    5)删除session中的指定键及值,在存储中只删除某个键及对应的值。

    del request.session['键']
    

    6)设置会话的超时时间,如果没有指定过期时间则两个星期后过期。

    request.session.set_expiry(value)
    
    • 如果value是一个整数,会话将在value秒没有活动后过期。
    • 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
    • 如果value为None,那么会话永不过期。

    示例

    写session

    1)打开booktest/views.py文件,创建视图session_test,代码如下:

    def session_test(request):
        request.session['h1']='hello'
        return HttpResponse('写session')
    

    2)打开booktest/urls.py文件,配置url。

        url(r'^session_test/$',views.session_test),
    

    3)运行服务器,打开浏览器请求如下网址。

    http://127.0.0.1:8000/session_test/
    

    4)浏览效果如下图,在"开发者工具"中可以查看到响应头中创建了Cookie,里面有个键为sessionid。

    5)打开MySQL数据库命令行,查询数据如下图。

    查看Cookie中的sessionid值为"l48euizwnd0u1vrq401rwc9yqxkj4ip4",数据表中session的键为“l48euizwnd0u1vrq401rwc9yqxkj4ip4”,是一样的,这样,服务器就可以在众多的请求者中找到对应的Session数据。

    在MySQL数据库命令行中复制值,在Base64解码中进行解码查看如下图。

    读session

    1)打开booktest/views.py文件,修改session_test视图如下:

    def session_test(request):
        # request.session['h1']='hello'
        h1=request.session.get('h1')
        return HttpResponse(h1)
    

    2)刷新浏览器效果如下图。

    删除

    1)打开booktest/views.py文件,修改session_test视图如下:

    def session_test(request):
        # request.session['h1']='hello'
        # h1=request.session.get('h1')
        del request.session['h1']
        return HttpResponse('ok')
    

    2)刷新浏览器,在数据库命令行中查询,base64解码后如下图。

    如果将所有的键及值都删除,逐个调用del太麻烦,可以使用clear()方法。

    删除session

    1)打开booktest/views.py文件,修改session_test视图如下:

    def session_test(request):
        # request.session['h1']='hello'
        # h1=request.session.get('h1')
        # del request.session['h1']
        request.session.flush()
        return HttpResponse('ok')
    

    2)刷新浏览器,在数据库命令行中查询如下图。

    使用Redis存储Session

    会话还支持文件、纯cookie、Memcached、Redis等方式存储,下面演示使用redis存储。

    1)安装包。

    pip install django-redis-sessions==0.5.6
    

    2)修改test3/settings文件,增加如下项:

    SESSION_ENGINE = 'redis_sessions.session'
    SESSION_REDIS_HOST = 'localhost'
    SESSION_REDIS_PORT = 6379
    SESSION_REDIS_DB = 2
    SESSION_REDIS_PASSWORD = ''
    SESSION_REDIS_PREFIX = 'session'
    

    3)打开booktest/views.py文件,修改session_test视图如下:

    def session_test(request):
        request.session['h1']='hello'
        # h1=request.session.get('h1')
        # del request.session['h1']
        # request.session.flush()
        return HttpResponse('ok')
    

    4)管理redis的命令,需要保证redis服务被开启。

    查看:ps ajx|grep redis
    启动:sudo service redis start
    停止:sudo service redis stop
    使用客户端连接服务器:redis-cli
    切换数据库:select 2
    查看所有的键:keys *
    获取指定键的值:get name
    

    5)刷新浏览器,在redis客户端中查看数据如下。

    展开全文
  • JavaWeb应用如何实现保持登录状态

    万次阅读 2017-07-24 17:50:50
    做JavaWeb开发,难免会遇到登录系统保持登录状态的问题?比如说我登录过后关闭浏览器,下次再访问相同的网站,默认会显示已登录状态,一段时间内就不必再重新登录了;再比如站在后台接口设计的角度去考虑,用户登录...

    做JavaWeb开发,难免会遇到登录系统保持登录状态的问题?比如说我登录过后关闭浏览器,下次再访问相同的网站,默认会显示已登录状态,一段时间内就不必再重新登录了;再比如站在后台接口设计的角度去考虑,用户登录后,做了一系列的用户操作接口,那么这些接口不可能都带上一个userid的字段吧,这样不仅开发麻烦,而且容易被黑客攻击。那么如何解决这些问题呢?那就是通过代理服务对客户端请求的拦截来实现,经过验证后才开始执行业务逻辑。

    如何搭建代理服务的过程,这里就不详细介绍了,我们以实现保持登录状态为例,实现原理大概是这样子的:

    1.客户端请求后台登录接口。

    2.后台验证通过后,将用户的登录状态保存至cookie并写入客户端。

    3.客户端再次登录网站,请求login接口时,后台直接从客户端获取到该用户写入cookie的登录状态。

    4.通过对该状态的验证,确认用户是否需要再次登录。

    5.如cookie过期,则跳转至登录页;如未过期,则直接显示为已登录状态。

    这里前端js用ajax请求即可,如请求一个url地址:

     

    我们要注意一点,在请求成功后的Response Headers中,有Set-Cookie一项,设置一个key为java,value为myJavaData的Map值,这个是重点,有这个值客户端就会自动把这个Map值设为cookie值,这就是我们所说的登录状态loginState,如下图所示:

    那么这个Set-Cookie一项数据怎么来呢?是通过Java后台设置的,源码如下:

    // 设置格式
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST");
    response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
    response.setContentType("text/html;charset=utf-8");
    response.setCharacterEncoding("utf-8");
    
    // 创建Cookie
    Cookie cookie = new Cookie("java", "myJavaData");
    // 有效期,秒为单位
    cookie.setMaxAge(3600);
    // 设置cookie
    response.addCookie(cookie);
    response.getWriter().print("cookie创建成功");

    这样一来,就实现了在后台服务端为客户端设置cookie的功能,用户在下次请求相同域的接口时,java后台只需

    // 获取客户端cookie
    request.setCharacterEncoding("utf-8");
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
    	for (Cookie c : cookies) {
    		System.out.println(c.getName() + "--->" + c.getValue());
    	}
    }

    即可获取客户端的登录状态,从而做出响应操作。(注意)此处的cookie值无需客户端专门带入,会随请求自动传输到后台。上例中的setMaxAge即为登录状态的有效期设置点。

     

    还有一种业务状态是希望,用户只要关闭了浏览器,该登录状态就会清除,下次打开浏览器必须重新登录,如CSDN博客登录即使如此。这种情况我们可以使用session会话实现:java后台设置session代码

    // 设置格式
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST");
    response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
    response.setContentType("text/html;charset=utf-8");
    response.setCharacterEncoding("utf-8");
    
    // 使用request对象的getSession()获取session,如果session不存在则创建一个
    HttpSession session = request.getSession();
    // 将数据存储到session中
    session.setAttribute("java", "myJavaData");
    // 获取session的Id
    String sessionId = session.getId();
    // 判断session是不是新创建的
    if (session.isNew()) {
    	response.getWriter().print("session创建成功,session的id是:" + sessionId);
    } else {
    	System.out.println(session.getAttribute("java")); // 值myJavaData
    	response.getWriter().print(
    			"服务器已经存在该session了,session的id是:" + sessionId);
    }

    客户端请求后,Set-Cookie一项同样具备了值:

     

    当然,上面只是举了一些简单的例子,在实际应用中不可能只保存一个loginState这么简单,还会保存如OSS_COOKIES,使用token值验证等多种安全验证手段综合。以上实现都是在请求与页面同域的情况下,如果想要跨域实现,即客户端与后台不在同一个域名下,则通过JSONP实现。

    展开全文
  • APP与服务端保持登录状态

    千次阅读 2018-07-02 17:16:39
    由于APP向服务端发起请求属于跨域访问,每次访问在服务端都会产生一个新的session,因此APP客户端与web端不同,无法通过session来保持登录状态。 为了维护app用户的登录状态,我们可以利用token来实现。 客户端...
  • 几种保持登录状态的方式

    千次阅读 2018-09-08 14:57:15
    几种保持登录状态的方式 白话讲session 这是我的博客目录,欢迎阅读 三种保持会话的方式 (一)session机制保持会话 存在的问题 高并发情况下,会占用服务器大量内存 分布式(一个业务分成几个子业务,部署在多个...
  • App保持登录状态的常用方法

    千次阅读 2019-04-15 14:14:09
    我们在使用App时,一次登录后App如果不主动退出登录或者清除数据,App会在很长一段时间内保持登录状态,或者让用户感觉到登录一次就不用每次都输入用户密码才能进行登录。银行、金融涉及到支付类的App一般不支持这种...
  • web验证用户登录状态

    千次阅读 2010-04-21 09:44:00
    在做web系统开发时,经常会遇到这样的需求:只允许一个用户在同一时间是登陆状态。用户在退出之前,不允许再次重复登陆。 --------------------------------------------------------------------------------我们...
  • APP保持登录状态的几种方法

    千次阅读 2018-10-29 09:39:35
    我们在使用App时,一次登录后App如果不主动退出登录或者清除数据,App会在很长一段时间内保持登录状态,或者让用户感觉到登录一次就不用每次都输入用户密码才能进行登录。银行、金融涉及到支付类的App一般不支持这种...
  • 1.前后端分离后,前端登录状态保持一般采用webstorage或是cookie来保存token或用户信息的方式来维持登录状态。如果webstorage或是cookie中没有token,则前端认为是没有登录,拦截到登录页面。vue中利用路由的before...
  • 我们需要和web服务器保持登录状态。所以我们需要记录sessionid;我们将网页用webview加载之后,用CookieManager 来获取本地的cookies 。然后设置到webview里面去。我们可以在下面这个回调方法中获取到。并且保存到...
  • 但是为了保持登录状态(在各个Activity之间切换时要让网站知道用户一直是处于登录状态)就需要进行cookie的读写。 httpclient相当强大,读写cookie非常容易: CookieStore cookies=((AbstractHttpClient)...
  • JavaWeb登录状态保持解决方案

    万次阅读 2017-01-04 11:49:28
    现在需要用户的网站系统就需要登录和注册,用户登录后可以进行更多权限的操作,但是登录一次之后不能让用户每次都进行登录,需要将这个状态保存下来持久化. Session是服务器端的会话保持载体,Cookie是浏览器端...
  • JWT(Json Web Token)实现状态保持

    千次阅读 2018-08-12 15:37:26
    Json web token (JWT), 是为了在网络应用间传递声明的基于JSON的开放标准,该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。其中的分布式站点的单点登陆的状态保持,在这里简单介绍下:举...
  • 利用JSPsession对象保持登录状态

    千次阅读 2017-05-13 10:26:56
    而实际运用中却希望服务器能记住客户端请求的状态,比如在网上购物系统中,服务器端应该能够识别并跟踪每个登录到系统中的用户挑选并购买商品的整个流程 。为此,web服务器必须采用一种机制来唯一地标识一个用户,...
  • web项目中登陆状态保持的三种方式

    千次阅读 2018-08-13 15:25:01
    例子有cookie和session的demo, 1、Cookie 2、Session 3、Token token也一样其实就是一个头字段,客户端每次请求时候带上这个头字段,后台进行校验通过则放行,头字段可以放在redis里面实现比较方便,后台也可以...
  • 最近一个项目,要和MES系统交互,交互步骤如下: 注塑机设备与MES管理系统交互 实现目标: ...5. Mes系统保持并记录。 接口协议为http 接口方式为Rest 如何记住登录信息,不必每次查询MES的时候都重新登录
  • 这绝对是一件有意思的事情,做过web开发的朋友应该都做过注册登录的功能,那么测试的时候也会发现如果在同一浏览器上先登录一个用户,然后再换另一个账号登录,刷新试试看,发现原来的账号被顶掉了对吧。不要想着...
  • 微信平台公众号开发access_token and Web session保持状态机制   1. token机制and session保持状态机制 1 2. access token是什么?? 1 3. 为什么需要access token 2 4. 需不需要保存access_token,...
  • Http环境本身是一种无连接状态的架构 , 在这种架构下服务器只能是被动的接受客户端的请求,返回结果,而无法主动的给客户端发送数据。而在很多需要实时数据交互(比如Web IM)的场景中,我们却希望能及时...
  • http协议和web应用有状态和无状态

    千次阅读 2015-03-06 20:47:48
    1、什么是Web应用程序的无状态性? 说基于http协议的web应用程序是请求——应答模式是无状态的,我们可以这样理解:每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受...
  • http无状态还是web应用无状态

    千次阅读 2013-03-25 10:24:39
    我们通常说的web应用程序的无状态性的含义是什么呢?   直观的说,“每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响...
  • 1.web端,用户第一次登陆之后,以后不需要再输入用户密码,就可以直接访问。使用cookie 2.shiro集群使用,需要共享session,把session放到数据库或redis就实现了这个目的 2.原理 会话管理器管理着应用中所有 ...
  • 最近项目需要给手机端提供数据,采用WebApi的方式,之前的权限验证设计不是很好,这次采用的是Basic基础认证。 1、常见的认证方式 我们知道,asp.net的认证机制有很多种。对于WebApi也不例外,常见的认证方式有 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 260,022
精华内容 104,008
关键字:

web保持登录状态