此问题基于this answer。
我正在为Python寻找类似于PHP的session_start()
的函数。我希望在PHP中访问类似$_SESSION
的字典,该字典在运行命令后可用。
答案 0 :(得分:8)
让我谈谈可能与你的问题有关的一些事情......它可能与你无关,但我认为其他人可能会带着完全相同的问题来到这里,并可能从我(有限的)经验中受益...因为我也曾经有过这个问题。
作为从PHP到Python(从不回头)的人,我认为了解会话如何工作是有用的。实现自己的会话框架可能不是个好主意,除非您(a)想要通过执行更多地了解会话管理,或者(b)需要现有框架不提供的内容。
Wikipedia始终是个好地方。底线:会话数据存储在服务器上的某个位置,并由唯一标识符(某种哈希)索引。此标识符在客户端和服务器之间来回传递,通常作为cookie或作为查询字符串(URL)的一部分。出于安全考虑,您需要使用SSL连接或使用其他一些数据(例如IP地址)验证会话ID。默认情况下,PHP将会话存储为文件,但是在可能带来安全风险的共享服务器上,因此您可能希望覆盖会话引擎,以便将会话存储在数据库中。 Python Web框架具有类似的功能。
当我开始用Python进行Web编程时,我发现了两件事。首先,PHP在语言中包含了很多魔力,这让初学程序员(我在2003年)很容易学习语言,但没有教会我如何运作。因此,我发现自己正在研究许多关于Web应用程序的主题,特别是数据库连接池,URL映射,会话和线程。 PHP(以及Django,根据我的理解)抽象出来。其次,PHP是一种非常糟糕的语言;)但它完成了工作!!
我个人使用CherryPy进行Web开发。它将会话管理作为您可以打开的“工具”。
答案 1 :(得分:7)
作为一名来自PHP并且正在使用Python的人,我可以告诉你Django是开始在网上处理Python的好方法。如果您一直在使用MVC frameworks in PHP,则尤其如此。也就是说,Django已经建立了对会话管理的支持,并在此处记录:
http://docs.djangoproject.com/en/dev/topics/http/sessions/
而且,出于好奇,我用普通的python环顾了会话管理,发现了这个:
http://code.activestate.com/recipes/325484/
从评论来看,似乎你最好使用一个经过验证的真实框架来为你处理这个问题。如果你对Django不感兴趣,你也可以checkout some of the others
答案 2 :(得分:5)
您可以考虑查看Beaker库中的Python,它不依赖于任何一个Web框架,它将在兼容WSGI的环境中工作:
Beaker是一个用于缓存和会话的库,用于Web应用程序和独立的Python脚本和应用程序。它附带了WSGI中间件,可以轻松地与基于WSGI的Web应用程序一起使用,以及缓存装饰器,以便于使用任何基于Python的应用程序。
答案 3 :(得分:3)
Python本身并不像PHP那样是Web语言,因此它没有内置Web功能。然而,有许多模块添加了这个功能,但是你必须具体说明你正在使用哪个模块。
以下是与the Django framework一起使用的方式,例如:
def post_comment(request, new_comment):
if request.session.get('has_commented', False):
return HttpResponse("You've already commented.")
c = comments.Comment(comment=new_comment)
c.save()
request.session['has_commented'] = True
return HttpResponse('Thanks for your comment!')
在更简单的Web框架中,可能没有会话支持。会话本身并非不可能实现,但您可以找到一个独立的模块,通过接收/发送会话ID来增加支持(会话ID存储在cookie中,几乎所有Web框架都有某种类型的支持。)
答案 4 :(得分:1)
这适用于使用Apache和零框架的Osx上的Python 3.6。直奔Cgi Bin。
#!/usr/local/bin/python3
# SheBang C:/Apps/Python0306/python.exe
import os, cgi, sys
sys.stderr = sys.stdout
import cgitb
cgitb.enable()
from http import cookies
from urllib.request import urlopen
import urllib
import urllib.request
import urllib.parse
import http.cookiejar
import requests
import datetime
import random
ary_CgiData = cgi.FieldStorage()
lst_PostValues = [("Alpha","Bravo"), ("Charlie","Delta")]
lst_PostValues.pop()
lst_PostValues.pop()
str_Line = ""
variable = ""
value = ""
r = ""
for key in ary_CgiData.keys():
variable = str(key)
value = str(ary_CgiData.getvalue(variable))
lst_PostValues.append([variable, value])
lst_Matrix = lst_PostValues
str_HtmlTable = "<table border=1>"
int_R = 0
int_C = 0
int_Rows = len(lst_Matrix)
if int_Rows > 0:
int_Cols = len(lst_Matrix[0])
while (int_R < int_Rows):
str_HtmlTable = str_HtmlTable + "<tr>"
for int_C in range(int_Cols):
str_HtmlTable = str_HtmlTable + "<td>" + str(lst_Matrix[int_R][int_C]) + "</td>"
str_HtmlTable = str_HtmlTable + "</tr>"
int_R = int_R + 1
str_HtmlTable = str_HtmlTable + "</table>"
str_MenuSelectList = str_HtmlTable
print ("Content-Type: text/html\n\n")
print ("<html>")
try:
if str(lst_Matrix[0][1]) == "AddCookies":
print ("<meta http-equiv='Set-Cookie' content='TestUniversity=ABCDEFGHIJK9876543210;expires=Wednesday, 08-Aug-2025 23:59:59 GMT'>")
if str(lst_Matrix[0][1]) == "DeleteCookies":
print ("<meta http-equiv='Set-Cookie' content='TestUniversity=ABCDEFGHIJK9876543210;expires=Wednesday, 08-Aug-1990 23:59:59 GMT'>")
except:
int_X = 0
str_CookieTest001 = ""
handler = {}
if 'HTTP_COOKIE' in os.environ:
cookies = os.environ['HTTP_COOKIE']
cookies = cookies.split('; ')
for cookie in cookies:
cookie = cookie.split('=')
handler[cookie[0]] = cookie[1]
for k in handler:
str_CookieTest001 += (k + " = " + handler[k] + "<br>")
print ("</head>")
print ("<title>Enter Some Title Here </title>")
print ("<body>")
print ("<br><center>Test Example </center><br>")
print ("<form action='012_SubmittedCode.py' method='post' >")
print ("<table border=1>")
print ("<tr><td><center><input type='submit' value='AddCookies' name='MenuSelect'></td>")
print ("<td><input type='submit' value='DeleteCookies' name='MenuSelect' ></td></tr>")
print ("</table>")
print ("<hr><hr>")
print ("</form>")
print ("<hr><hr>")
print ("</form>")
try:
print ("Menu Button Selected: " + str(lst_Matrix[0][1]))
except:
int_X = 1
print ("<hr><br>")
print ("Menu Option Selected:<br>")
print (str_MenuSelectList)
print ("<br><hr>")
print ("############ Cookie Return array Method of Choice ############<br><hr>")
print (str_CookieTest001)
print ("<hr><hr>")
print ("</body>")
print ("</html>")