Flask会话值不会持久存在于共享主机上

时间:2018-01-20 10:47:29

标签: python flask cgi shared-hosting cs50

我在localhost上开发了一个Flask应用程序(运行Python 3)。它可以工作,但是当转移到我的共享主机帐户(运行Python 2)时,它没有。我修复了与Python版本相关的所有问题。但<TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="first text" android:layout_margin="10dp"/> 无效。它的值在请求之间不会持续存在。

我尝试使用更简单的代码(class ARPSniffer: def testTshark(self, iface): print("Testing if tshark works. Using {}".format(iface)) cmd = "tshark -i " + iface args = shlex.split(cmd) tshark = subprocess.Popen(args, stdout=PIPE) for line in io.TextIOWrapper(tshark.stdout, encoding="utf-8"): print(line) def run(self, iface): try: t = Thread(target=self.testTshark, args=(iface, )) t.daemon = True t.start() t.join except KeyboardInterrupt: print("\nExiting ARP monitor...") sys.exit(0) if __name__ == '__main__': iface = 'wlan1' arps = ARPSniffer() arps.run(iface) )重新创建问题,注释掉的部分是我的应用程序中如何配置会话:

session

如果您转到test.py,您会看到import sys sys.path.insert(0, '/home/user_name/public_html') from flask import Flask, request, session from flask.ext.session import Session from tempfile import mkdtemp from cs50 import SQL from constants import * app = Flask(__name__) #app.config["SESSION_TYPE"] = "filesystem" #app.config["SESSION_PERMANENT"] = False #app.config["SESSION_FILE_DIR"] = mkdtemp() Session(app) @app.route('/set/') def set(): session['key'] = 'value' return 'ok' @app.route('/get/') def get(): return "{}".format(session.get('key')) 。但在/set/上,您会看到ok

这是我的CGI文件(我只需要共享主机,而不是localhost):

/get/

如果需要None个文件:

#!/home/user_name/public_html/cgi-bin/flask/bin/python
import sys
sys.path.insert(0, '/home/user_name/public_html')

# Enable CGI error reporting
import cgitb
cgitb.enable()

import os
from wsgiref.handlers import CGIHandler

app = None
try:
    import test
    app = test.app
except Exception, e:
    print "Content-type: text/html"
    print
    cgitb.handler()
    exit()

#os.environ['SERVER_PORT'] = '80'
#os.environ['REQUEST_METHOD'] = 'POST'

class ScriptNameStripper(object):
   def __init__(self, app):
       self.app = app

   def __call__(self, environ, start_response):
       environ['SCRIPT_NAME'] = ''
       return self.app(environ, start_response)

app = ScriptNameStripper(app)

try:
    CGIHandler().run(app)
except Exception, e:
    print "Content-type: text/html"
    print
    cgitb.handler()
    exit()

谷歌搜索没有帮助,Stackoverflow上的其他类似问题无法修复它。欢迎任何解决方案/帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

我仍然不确定是否正在编写session(正如@Danila Ganchar所指出的那样),但只是评论出第3条配置行解决了这个问题。

因此test.py所做的更改是:

app.config["SESSION_TYPE"] = "filesystem"
app.config["SESSION_PERMANENT"] = False
#app.config["SESSION_FILE_DIR"] = mkdtemp()

我猜mkdtemp()无效,就像在localhost上一样。