我的会话cookie遇到了一个奇怪的行为:在我的mac上运行烧瓶应用程序,一切正常,并且在任何浏览器上都设置了cookie。
但是,如果我在Windows服务器上运行它,会话cookie不会在Safari(和iOS)上设置 - 但仍然适用于任何其他浏览器。怎么会发生这种情况?以下是一个简单应用的示例:
public class CountryManager: NSObject {
public func saveWines(json:JSON) {
var countriesForStore = [Country]()
let db = RLMRealm.defaultRealm()
for (key:String, subJson:JSON) in json{
let country = Country() //Serialize each country
country.configure(key.toInt()!,json:subJson)
countriesForStore.append(country)
}
db.beginWriteTransaction()
db.addOrUpdateObjectsFromArray(countriesForStore)
db.commitWriteTransaction()
}
public func regionsForCountryWithNameLike(name:String) -> RLMResults {
let db = RLMRealm.defaultRealm()
let countryPredicate = NSPredicate(format: "name CONTAINS[c] %@", name)
let countries = Country.objectsWithPredicate(countryPredicate)
var rawRegionNames = [String]()
for country in countries {
if let c = country as? Country {
for region in c.regions{
rawRegionNames.append((region as! Region).name)
}
}
}
let regionNames = "','".join(rawRegionNames)
let regionPredicate = NSPredicate(format: "name IN {'\(regionNames)'}")
let regions = Region.objectsInRealm(db, withPredicate: regionPredicate)
return regions
}
}
以示例test.html:
import os
import uuid
from flask import Flask, render_template, session
app = Flask(__name__)
SESSION_LIFETIME = 3600
@app.before_request
def before_request():
# create session
if not session.get('uid'):
session.permanent = True
session['uid'] = uuid.uuid4()
@app.route('/', methods=['GET'])
def test():
return render_template('test.html')
if __name__ == "__main__":
app.secret_key = os.urandom(24)
app.permanent_session_lifetime = SESSION_LIFETIME
app.debug = True
app.run(threaded=True,
host="0.0.0.0",
port=int("5000")
)
为什么它适用于任何浏览器而不适用于(重要)Safari?为什么在我的mac上运行相同的代码(从外部和本地访问),但在Windows上没有?所有其他浏览器都使用Windows(甚至从外部)。
答案 0 :(得分:1)
我有相同的行为,会话变量无法正常工作。
所以我所做的就是删除会话使用,并像我使用list with key-value pair
首先初始化列表
list_name = {'key1':'','key2':''}; and so on...
然后将变量存储在此列表中,并通过替换键
在任意位置访问它