我使用WSGI在我的apache服务器上运行了几个python 3.6 Flask应用程序。
在同一个apache服务器上运行有2个不同的应用程序:
In [2]: timeit ts.distribution(
start=date_parse('2012-01-01'),
end=date_parse('2013-01-01')
)
619 µs ± 7.25 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
www.example.com/lodge
这两个应用都有一个独特的www.example.com/dashboard
app.secret_key
应用程序是一个带有自己路径的烧瓶应用程序:
/dashboard
/dashboard/login
/dashboard/orders
登录路由调用/dashboard/staff
并允许用户输入其登录信息。然后,登录的令牌将存储在会话变量中
session.clear()
和/dashboard/orders
路由都有一个装饰器,用于检查会话中是否存在已登录的令牌,如果不存在,则重定向到登录路由。
dashboard/staff
应用是另一个简单的Flask应用,它有自己的路线:
/lodge
/lodge/welcome
/lodge/personal
/lodge/review
欢迎路线也会调用/lodge/confirmation
,然后显示网络表单。当用户提交webform时,将调用session.clear()
路由,将这些webform输入值存储到会话中。
我遇到的问题是,如果我导航到personal
并登录,我可以在工作人员和订单路线之间轻弹没有任何问题,但是当我打开一个新标签然后转到{{ 1}}(然后调用www.example.com/dashboard/login
)然后重新打开仪表板选项卡并尝试转到工作人员或命令路由,当会话被清除时,我被重定向回登录路由。
www.example.com/lodge/welcome
:
session.clear
旁注,如果我访问httpd.conf
上的信息中心应用以及<VirtualHost *:80>
WSGIScriptAlias /newapp "c:/lodge/lodge.wsgi"
<Directory "c:/lodge">
Require all granted
</Directory>
WSGIScriptAlias /dashboard "c:/dashboard/dashboard.wsgi"
<Directory "c:/dashboard">
Require all granted
</Directory>
</VirtualHost>
上的小屋应用
答案 0 :(得分:1)
尝试使用虚拟环境。看来你的烧瓶应用程序在一个python执行线程中运行。您可以找到Here,如何在虚拟环境中运行您的应用。
答案 1 :(得分:1)
旁注,如果我访问http://example.com/dashboard上的信息中心应用以及http://www.example.com/lodge上的小屋应用
,则不会发生这种情况
这实际上是您看到此行为的原因。 Cookie绑定到域而不是路径。
在example.com
设置Cookie后,该Cookie适用于该域的所有链接,路径和网址。对www.example.com
有效 - 这解释了如果您在其他子域上运行某个应用程序,它的工作原理。
所以你所看到的是正确的行为。
答案 2 :(得分:1)
在这里回答我自己的问题。
通过更改两个应用程序的应用程序配置,我很容易在同一个apache服务器上实现了多个应用程序。不需要虚拟环境或修改wsgi脚本!
洛奇应用程序:
app = Flask(__name__)
app.config.from_object(__name__)
app.config.update(
SESSION_COOKIE_NAME = 'session_lodge',
SESSION_COOKIE_PATH = '/lodge/'
)
信息中心应用:
app = Flask(__name__)
app.config.from_object(__name__)
app.config.update(
SESSION_COOKIE_NAME = 'session_db',
SESSION_COOKIE_PATH = '/dashboard/'
)
@ m-dennis和@ burhan-khalid的回答提供了对问题的一些见解,所以非常感谢!
拥有多个子域名对我来说不是一个选项,当我们在他们自己的虚拟环境中运行这两个应用程序时,我遇到了同样的问题。