自定义Session

#!/usr/bin/env python
import tornado.ioloop
import tornado.web

container = {}
class Session:
    def __init__(self,handler):
        self.handler = handler
        self.random_str = None

    def __set_random_str(self):
        import hashlib
        import time
        obj = hashlib.md5 ( )
        obj.update ( bytes ( str ( time.time ( ) ), encoding=‘utf-8‘ ) )
        random_str = obj.hexdigest ()
        return random_str
    def set_value(self,key,value):
        if not self.random_str:
            random_str = self.handler.get_cookie(‘__kakaka__‘)
            if not random_str:
                random_str = self.__set_random_str()
                container[random_str] = {}
            else:
                if random_str in container.keys():
                    pass
                else:
                    random_str = self.__set_random_str()
                    container[random_str] = {}
            self.random_str = random_str
        container[self.random_str][key] = value
        self.handler.set_cookie("__kakaka__",self.random_str)
    def get_value(self,key):
        random_str = self.handler.get_cookie(‘__kakaka__‘)
        if not random_str:
            return None
        user_info_dict = container.get(random_str,None)
        if not user_info_dict:
            return None
        value = user_info_dict.get(key,None)
        return value
class IndexHander(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        if self.get_argument(‘u‘,None)in[‘alex‘,‘eric‘]:
            s = Session(self)
            s.set_value(‘is_login‘, True)
            s.set_value(‘name‘, self.get_argument(‘u‘,None))
            print(container)
        else:
            self.write(‘请登录‘)
class ManagerHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        s = Session(self)
        val = s.get_value(‘is_login‘)
        if val:
            self.write(s.get_value(‘name‘))
        else:
            self.write("失败")

settings = {
    "template_path":"views",
    "static_path":"statics",
    "cookie_secret":"taochen"
}

application = tornado.web.Application([
    (r"/index",IndexHander),
    (r"/manager",ManagerHandler),
],**settings)

if __name__ == ‘__main__‘:
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

app.py

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     <div>首页</div>
</body>
</html>

index.html

时间: 2024-12-17 04:14:53

自定义Session的相关文章

Asp.net Mvc 自定义Session (一)

大家都知道用系统默认的session 会存在这样的问题 如果用户过多的话 session 会自动消亡,而且不能支持分布式和集群. 这系列博客主要讲解  怎样 解决用户过多的session自动消亡,和分布式集群 使用例子 Session["test"] = "啄木鸟"; 完全不改变系统的使用风格,可以直接升级系统:     在这里我们主要用的 HttpRuntime.cache 和 memcache. 希望读者这跟着我的思路,一步一步来设计自定义Session 首先,

使用 IntraWeb (40) - 自定义 Session 数据

修改 UserSessionUnit 单元: unit UserSessionUnit; interface uses IWUserSessionBase, SysUtils, Classes, IWApplication; type TIWUserSession = class(TIWUserSessionBase) procedure IWUserSessionBaseCreate(Sender: TObject); procedure IWUserSessionBaseDestroy(Se

监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了,就在Session域中保存相对应的属性.如果没有登陆,那么Session的属性就应该为空. 现在,我们想要统计的是网站的在线人数.我们应该这样做:我们监听是否有新的Session创建了,如果新创建了Sesssion,那么在线人数就应该+1.这个在线人数是整个站点的,所以应该有Context对象保存.

监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息

一.案例一:自定义Session扫描器1.案例说明当一个Web应用创建的Session很多时,为了避免Session占用太多的内存,我们可以选择手动将这些内存中的session销毁,那么此时也可以借助监听器技术来实现.对于拿到 每个session 对象, 判断session的最后一次访问时间 与当前时间 的间隔是否超过 5 分钟, 如果超过就手动销毁 2.实现代码SessionScanner:session对象的监听器 MyTimerTask:定时器timer的任务对象 SessionScann

Tornado之自定义session

面向对象基础 面向对象中通过索引的方式访问对象,需要内部实现 __getitem__ .__delitem__.__setitem__方法 #!/usr/bin/env python # -*- coding:utf-8 -*- class Foo(object): def __getitem__(self, key): print '__getitem__',key def __setitem__(self, key, value): print '__setitem__',key,value

MongoDB实现ASP.NET 自定义Session

由来     由于HTTP协议是无状态的,客户端与服务器端进行"请求-响应"操作后,建立的连接就释放了,服务器端根本不知道刚才是哪个客户端访问的.但是有些场景是需要知道客户端的状态的,最典型的就是登陆问题,成功登陆后一段时间内就不需要再登陆.为了解决这个问题,服务器端引入了Session技术,它将会话状态保存在服务器端的技术. Session原理     当用户打开浏览器,请求某个网站的时候,服务器接收请求后,就会在内存中为该请求分配一个内存空间,这个内存空间就叫Session.一个S

php 自定义session

session句柄定义:class SessionHandler{ private $_driver; //驱动 private $_gcMaxLifeTime=1440; //session生存周期 private $_gcProbability=5; //回收因子,不用每次执行session都执行垃圾回收机制,注意:回收因子越大,命中回收机率越大 public function __construct(){ //ini_set('session.gc_divisor',1); $this->

python tornado 自定义session

python tornado 中需要自定session session原理: 1.客户端发送请求信息,服务端为用户端生成一个加密随机字符串random_str,然后将用户的信息作为这个随机字符串random_str的值,增加用户信息的安全性: 2.将random_str做为cookie写入给客户端,然后服务端进行判断用户携带cookie的情况 1 import tornado.web 2 import tornado.ioloop 3 4 class Session(): 5 def __ini

自定义session过期时间

参考:http://www.jb51.net/article/52309.htm 在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟). 这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用! 其实不是不起作用,而是因为系统默认: session.gc_probability = 1 session.gc_divisor = 1000 garbage collection 有个概率的,1/1000就是session