gpt4 book ai didi

python - 对于 php 程序员来说,在 Python + Pylons 中进行 session 处理的正确方法

转载 作者:行者123 更新时间:2023-11-30 23:57:09 25 4
gpt4 key购买 nike

我是一名 php 程序员,刚刚开始使用 Python。我试图让 Python 通过数据库存储的 session 来处理登录/注销。一切正常,但似乎不一致。例如,有时用户未注销。有时用户会“切换”登录。我猜这与线程安全有关,但我只是不确定从哪里开始解决这个问题。任何帮助,将不胜感激。这是我现在拥有的:

#lib/base.py

def authenticate():
#Confirm login
try:
if user['authenticated'] != True:
redirect_to(controller='login', action='index')
except KeyError:
redirect_to(controller='login', action='index')

#Global variables
user = {}
connection = {}

class BaseController(WSGIController):

#Read if there is a cookie set
try:
session = request.cookies['session']

#Create a session object from the session id
session_logged_in = Session(session)

#If the session is valid, retrieve the user info
if session_logged_in.isValid(remote_addr):

#Set global variables about the logged in user
user_logged_in = User(session_logged_in.user_id)
user['name'] = c.name = user_logged_in.name
user['name_url'] = c.name_url = user_logged_in.name_url
user['first_name'] = c.first_name = user_logged_in.first_name
user['last_name'] = c.last_name = user_logged_in.last_name
user['email'] = c.email = user_logged_in.email
user['about'] = c.about = user_logged_in.about
user['authenticated'] = c.authenticated = True
user['profile_url'] = c.profile_url = user_logged_in.profile_url
user['user_thumb'] = c.user_thumb = user_logged_in.user_thumb
user['image_id'] = c.image_id = user_logged_in.image_id
user['id'] = c.user_id = user_logged_in.id

#Update the session
session_logged_in.current_uri = requested_url
session_logged_in.update()

#If no session has been set, do nothing
except KeyError:
user['authenticated'] = False

然后我可以从我的 Controller 访问全局用户:

#controllers/profile.py
from project.lib.base import BaseController, user
class ProfileController(BaseController):

def index(self, id=None, name_url=None):

#If this is you
if user['id'] == 1
print 'this is you'

有更好的方法吗?感谢您的帮助。

最佳答案

Pylons 有一个“ session ”对象来处理这种情况。 example Pylons 网站上的内容似乎符合您的要求。

我认为您由于全局“用户”和“连接”而遇到问题。 Pylons 有一个 globals旨在在所有 Controller 之间共享信息的对象,并且不会在每次请求时重置。

关于python - 对于 php 程序员来说,在 Python + Pylons 中进行 session 处理的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3873958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com