自定义token,保存到客户端的cookie中,

自定义token


#原理自定义token,放入cookie中,不用存数据库

#token定义方式 >>>>> "加密字符串"|登陆用户id|用户登陆时间

#加密字符串由登陆用户id,登陆时间和盐通过md5加密完成
import hashlib
def get_token(user_id,current_time):
    md5= hashlib.md5()
    md5.update("宝塔镇河妖".encode("utf-8"))
    md5.update(str(current_time).encode("utf-8"))
    md5.update(str(user_id).encode("utf-8"))
    md5.update("egon掏大刀".encode("utf-8"))
    token ="|".join([md5.hexdigest(),str(user_id),str(current_time)])
    return token

#对应的解密方法
def check_token(token,redis_conn):
    try:
        res = redis_conn.get(token)
        if not res:
            return False,"未登陆"
        user_info = token.split("|")
        user_id = user_info[1]
        create_time = user_info[2]
        if token != get_token(user_id,create_time):
            return False,"非法登陆"
        return True,"登陆成功"
    except Exception as e:
        print(e)
        return False,"未知错误"
    pass

    #登陆函数
    def post(self, request):
        uname = request.POST.get("uname")
        user = User.objects.filter(uname=uname)
        if  not user:
            return Response({"status": 101, "msg": "user not exists"})
        pwd = request.POST.get("pwd")
        hashlib_pwd = hash_pwd(pwd)
        db_pwd = user[0].pwd
        if hashlib_pwd != db_pwd:
            return Response({"status": 102, "msg": "password error"})
        try:
            token = get_token(user[0].pk, time.time())
            if user[0].isadmin:
                response = render(request, "admin/index.html", {"uname": uname})
            else:
                response = render(request, "user/index.html", {"uname": uname})
            #将token信息放入cookie中,客户端就会将token存入cookie中,下次来的时候request.COOKIE.get("token")就能拿到
            response.set_cookie("token", token)
            return response
        except Exception as e:
            return Response({"status": 103, "msg": "unknown error"})

原文地址:https://www.cnblogs.com/robert-zhou/p/10743357.html

时间: 2024-10-15 06:09:40

自定义token,保存到客户端的cookie中,的相关文章

下面对比session和cookie.cookie保存在客户端,session保存在服务器端,使用我用session比较多一些

1.cookie保存在客户端,session保存在服务器端的文件系统/数据库/memcache等. 2.session因为保存有服务器端,安全性无疑更高一些. 3.cookie通过网络在客户端与服务器端传输,会占用一些带宽:而session保存在服务器端,不需要传输. 4.cookie的生命周期是累计的,从创建时就开始计算,20分钟后生命周期就结束,即cookie无效: session的生命周期是间隔的.从创建时开始计时,如果20分钟内,没有访问过session,那么session会在20分钟时

客户端传递Cookie到WebView中

公司项目要求将客户端的Cookie传递到WebView中,代码如下,关键是对每个Cookie都需要设置url键. 1 public void synCookies(String url, Context mContext) { 2 3 URL u = null; 4 try { 5 u = new URL(url); 6 } catch (MalformedURLException e) { 7 e.printStackTrace(); 8 } 9 10 CookieSyncManager.cr

将用户名保存至cookie中

1.前台页面实现: <input id="remember" name="remember" type="checkbox" value="remember-me">记住我 2.后台获取remember参数,判断它的值是否为remember-me,如果是,则: if ("remember-me".equals(remember)) { rememberMe(username, password,

c#登录时保存账号密码到cookie

登陆界面有用户名.密码输入框,一个’记住账号密码‘的复选框. 1.登录时,勾选‘记住账号密码‘复选框,则会把用户名密码保存在客户端cookie里,保存时间为最大值(直到用户清除浏览器缓存或者取消勾选’记住账号密码‘复选框): 2.登录时,取消勾选‘记住账号密码‘复选框,会清除cookie保存的用户名密码. 3.登录时,当修改了用户名密码,会判断cookie保存的值是否与输入的相同,如果不同,则会修改cookie的值. 4.登录时,当勾选了‘记住账号密码‘复选框,下次打开登录界面,‘记住账号密码‘

Servlet课程0426(九)Servlet服务器端创建Cookie和客户端读取Cookie

服务器端创建Cookie: Win7默认Cookie位置 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies CookieTest1.java //CookieTest1 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class CookieTest1 extends HttpServlet{ public voi

在Cookie中存储对象

背景介绍 做项目过程中,用户登陆之后,需要将用户的信息存到Cookie中,但因为Cookie中只能存储字符串,所以想到了先把用户实体序列化成Json串,存储在Cookie中,用到的时候再拿出来反序列化. 道理很简单,网上的例子也很多,但还是遇到一些小困难.下面与大家分享成果.(我的开发环境为VS2012,.net framework版本为4.0,) C#中Json与对象之间的互相转换 下载并引用Newtonsoft.Json.dll 定义一个简单的用户实体: public class UserI

php在客户端禁用cookie时让session不失效的解决方法

cookie固然好,不过有些客户端浏览器会禁用cookie,这就会导致你所依赖cookies的程序会失效或出错,那么若真出现用户关闭cookies的情况,PHP应该如何再次使用session?方法还是有的. 1.设置php.ini的session.use_trans_sid = 1或者打开enable-trans-sid选项,让PHP自动跨页传递session id.2.手动通过URL传值.隐藏表单传递session id.3.用文件.数据库等形式保存session_id,在跨页过程中手动调用.

【干货】如何通过OPC自定义接口来实现客户端数据的读取?

上篇博文分享了我的知识库,被好多人关注,受宠若惊.今天我把我在项目中封装的OPC自定义接口的程序分享一下.下面将会简单简单介绍下OPC DA客户端数据访问,以及搭配整个系统的运行环境. OPC(OLE for Process Control)其实就是一套标准,我对这套标准理解不多,使用过程中就把它理解一套协议或者规范,主要用于工控领域.OPC中有很多规范,我主要使用OPC DA规范来进行数据的读写操作.还有其他规范,比如OPC UA.OPC HDA等.如果你做的是OPC Server开发查下这方

SpringSecurity 进行自定义Token校验

背景 Spring Security默认使用「用户名/密码」的方式进行登陆校验,并通过cookie的方式存留登陆信息.在一些定制化场景,比如希望单独使用token串进行部分页面的访问权限控制时,默认方案无法支持.在未能在网上搜索出相关实践的情况下,通过官方文档及个别Stack Overflow的零散案例,形成整体思路并实践测试通过,本文即关于该方案的一个分享. 参考 官方文档:https://docs.spring.io/spring-security/site/docs/5.0.5.BUILD