官方的例子
http://webpy.org/cookbook/sessions.zh-cn
服务器端有三种方式存session
一种是基本的store ,放在内存里吧
一种是diskstore ,会在code.py同级建一个sessions的文件夹
一种是dbstore,要对应的建一个表,试着改过对应的列的名字,会报错,目前看来也就是这个db的表里面的东西都是固定的
create table sessions ( session_id char(128) UNIQUE NOT NULL, atime timestamp NOT NULL default current_timestamp, data text );
测试的结果
db.py
import sqlite3
cx = sqlite3.connect('d:/temp/sessions.db') cu=cx.cursor() #cu.execute(''' create table sessions ( #session_id char(128) UNIQUE NOT NULL, #atime timestamp NOT NULL default current_timestamp, #data text) #''') #cx.commit() cu.execute('select * from sessions') for i,row in enumerate(cu): print i,row cx.close()
code.py
import web import sqlite3 web.config.debug = False urls = ( "/count", "count", "/reset", "reset" ) app = web.application(urls, locals()) #store = web.session.DiskStore('sessions') #session = web.session.Session(app, store, initializer={'count': 0}) db = web.database(dbn='sqlite', db='sessions.db', ) store = web.session.DBStore(db, 'sessions') session = web.session.Session(app, store, initializer={'count': 0}) class count: def GET(self): session.count += 1 return str(session.count) class reset: def GET(self): session.kill() store.cleanup(0.002) #加了个cleanup看效果来着 return "" if __name__ == "__main__": app.run()
真是太简单了,连session都有3种方法可以选,我怎么没记得以前java有这么灵活呢?
不过,不管是读写文件还是数据库,总是比较慢的吧?
还有挺奇怪的是reset的时候,不要cleanup一下么?只是kill掉进程的话,不论是文件还是db,都会越来越大的 吧?
真要是本番的话,要不要再写个cron定期清一下?
或者如果真的是本番,根本不会用这2个方法?