Fixes in sessions for avoid problems, now use diskcache for file sessions
This commit is contained in:
parent
41462b3bda
commit
c23b650277
3 changed files with 40 additions and 70 deletions
|
|
@ -6,6 +6,11 @@ from bottle import request, response
|
|||
import os
|
||||
import json
|
||||
import fcntl
|
||||
import errno
|
||||
import time
|
||||
import shutil
|
||||
import uuid
|
||||
from diskcache import Cache
|
||||
|
||||
try:
|
||||
|
||||
|
|
@ -72,12 +77,6 @@ class ParamecioSession:
|
|||
def save(self):
|
||||
|
||||
# Here get the function for load session
|
||||
"""
|
||||
path_cookie=config.session_opts['session.data_dir']+'/session_'+self.session['token']
|
||||
|
||||
with open(path_cookie, 'w') as f:
|
||||
f.write(json.dumps(self.session))
|
||||
"""
|
||||
|
||||
save_session(self.session['token'], self.session)
|
||||
|
||||
|
|
@ -118,23 +117,6 @@ def get_session():
|
|||
|
||||
# Here get the function for load session
|
||||
|
||||
"""
|
||||
path_cookie=config.session_opts['session.data_dir']+'/session_'+cookie
|
||||
|
||||
if os.path.isfile(path_cookie):
|
||||
|
||||
with open(path_cookie) as f:
|
||||
|
||||
json_txt=f.read()
|
||||
|
||||
if(json_txt).strip()!='':
|
||||
s=json.loads(json_txt)
|
||||
else:
|
||||
s={'token': cookie}
|
||||
else:
|
||||
s={'token': cookie}
|
||||
"""
|
||||
|
||||
s=load_session(cookie)
|
||||
|
||||
request.environ['session']=s
|
||||
|
|
@ -146,7 +128,11 @@ def get_session():
|
|||
|
||||
return ParamecioSession(s)
|
||||
|
||||
if config.session_opts['session.type']=='redis':
|
||||
if config.session_opts['session.type']=='mysql':
|
||||
|
||||
pass
|
||||
|
||||
elif config.session_opts['session.type']=='redis':
|
||||
|
||||
import redis
|
||||
|
||||
|
|
@ -173,54 +159,32 @@ if config.session_opts['session.type']=='redis':
|
|||
|
||||
r.set(token, json.dumps(session))
|
||||
|
||||
def after_session():
|
||||
pass
|
||||
|
||||
else:
|
||||
|
||||
cache=Cache(config.session_opts['session.data_dir'])
|
||||
|
||||
def load_session(token):
|
||||
|
||||
# Here get the function for load session
|
||||
|
||||
path_cookie=config.session_opts['session.data_dir']+'/session_'+token
|
||||
|
||||
if os.path.isfile(path_cookie):
|
||||
|
||||
with open(path_cookie) as f:
|
||||
|
||||
json_txt=f.read()
|
||||
|
||||
if(json_txt).strip()!='':
|
||||
s=json.loads(json_txt)
|
||||
if token in cache:
|
||||
s=json.loads(cache[token])
|
||||
else:
|
||||
s={'token': token}
|
||||
else:
|
||||
# Need regenerate session
|
||||
|
||||
s=generate_session()
|
||||
cache.add(token, json.dumps(s))
|
||||
|
||||
return s
|
||||
|
||||
def save_session(token, session):
|
||||
|
||||
path_cookie=config.session_opts['session.data_dir']+'/session_'+token
|
||||
|
||||
with open(path_cookie, 'w') as f:
|
||||
|
||||
cache[token]=json.dumps(session)
|
||||
#pass
|
||||
pass
|
||||
#Lock file, if cannot lock wait
|
||||
|
||||
while True:
|
||||
try:
|
||||
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
||||
break
|
||||
except IOError as e:
|
||||
# raise on unrelated IOErrors
|
||||
if e.errno != errno.EAGAIN:
|
||||
raise
|
||||
else:
|
||||
time.sleep(0.1)
|
||||
|
||||
f.write(json.dumps(session))
|
||||
|
||||
fcntl.flock(f, fcntl.LOCK_UN)
|
||||
|
||||
"""
|
||||
def generate_session():
|
||||
s=request.environ.get(config.cookie_name)
|
||||
|
|
@ -235,11 +199,11 @@ def get_session():
|
|||
return request.environ.get(config.cookie_name)
|
||||
#ParamecioSession()
|
||||
else:
|
||||
return None
|
||||
return ParamecioSession({})
|
||||
|
||||
except:
|
||||
|
||||
return None
|
||||
return ParamecioSession({})
|
||||
"""
|
||||
"""
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ from paramecio.citoplasma.datetime import set_timezone
|
|||
from itsdangerous import JSONWebSignatureSerializer
|
||||
from paramecio.citoplasma.keyutils import create_key_encrypt, create_key_encrypt_256, create_key
|
||||
from paramecio.wsgiapp import app
|
||||
#from paramecio.citoplasma.sessions import after_session
|
||||
|
||||
modules_pass=False
|
||||
|
||||
|
|
@ -23,6 +24,19 @@ modules_pass=False
|
|||
workdir=os.getcwd()
|
||||
arr_module_path={}
|
||||
|
||||
if config.session_enabled==True:
|
||||
#Create dir for sessions
|
||||
|
||||
if 'session.data_dir' in config.session_opts:
|
||||
|
||||
if not os.path.isdir(config.session_opts['session.data_dir']):
|
||||
os.makedirs(config.session_opts['session.data_dir'], 0o700, True)
|
||||
"""
|
||||
@app.hook('after_request')
|
||||
def clean_session():
|
||||
after_session()
|
||||
"""
|
||||
|
||||
def prepare_app():
|
||||
|
||||
def print_memory():
|
||||
|
|
@ -46,14 +60,6 @@ def prepare_app():
|
|||
|
||||
#app.add_hook('before_request', print_memory)
|
||||
|
||||
if config.session_enabled==True:
|
||||
#Create dir for sessions
|
||||
|
||||
if 'session.data_dir' in config.session_opts:
|
||||
|
||||
if not os.path.isdir(config.session_opts['session.data_dir']):
|
||||
os.makedirs(config.session_opts['session.data_dir'], 0o700, True)
|
||||
|
||||
set_timezone()
|
||||
|
||||
|
||||
|
|
|
|||
2
setup.py
2
setup.py
|
|
@ -21,7 +21,7 @@ setup(name='paramecio',
|
|||
url='http://paramecioproject.com/',
|
||||
packages=['paramecio', 'paramecio.i18n'],
|
||||
include_package_data=True,
|
||||
install_requires=['bottle', 'mako', 'mysqlclient', 'sqlalchemy', 'beaker>=1.8.0', 'itsdangerous', 'colorama','cherrypy', 'arrow'],
|
||||
install_requires=['bottle', 'mako', 'mysqlclient', 'sqlalchemy', 'diskcache', 'itsdangerous', 'colorama','cherrypy', 'arrow'],
|
||||
entry_points={'console_scripts': [
|
||||
'paramecio = paramecio.console:start',
|
||||
]},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue