2009-07-26 3 views
4

この質問はthis answerに基づいています。Python Webアプリケーションでセッションを開始するにはどうすればよいですか?

私はPythonのPHPのsession_start()に似た関数を探しています。 PHPで$_SESSIONのような辞書にアクセスしたいのですが、これはコマンドを実行した後に利用可能になります。

+1

Pythonはそれ自身ではなく、PHPのようなWebフレームワークです。どのようなWebフレームワークを使用していますか? –

+1

私は現時点ではPythonのWebフレームワークを使用していません。しかし、私はそれを見つけようとしています。 PHPがWebフレームワークであることを指摘してくれてありがとう。私はそれが他の多くのプログラミング言語にすぎないと考えていました。 –

答えて

8

私はあなたの質問に関連しているかもしれないいくつかのことを解決してみましょうことができます...それはあなたのために適切ではないかもしれませんが、私は他の人がまったく同じでここに来るかもしれないと思います私の(限られた)経験から恩恵を受けるかもしれません...私もこの質問を一度に持っていたからです。

PHPからPythonに行きました(そして振り返ってみませんでした)と言えば、セッションがどのように動作するかを理解すると便利です。おそらくではなく、あなた自身のセッションフレームワークを実装することをお勧めします。(a)既存のフレームワークが提供していないものを行うことによってセッション管理についてもっと理解したいのでなければ。

Wikipediaは、いつでも開始するのに適しています。結論:セッションデータはサーバー上のどこかに格納され、一意の識別子(何らかのハッシュのハッシュ)で索引付けされます。この識別子は、クライアントとサーバーの間で、通常はCookieとして、またはクエリ文字列(URL)の一部として前後に渡されます。セキュリティのために、SSL接続を使用するか、セッションIDを他のデータ(IPアドレスなど)で検証する必要があります。デフォルトでは、PHPはセッションをファイルとして保存しますが、セキュリティ上のリスクを伴う可能性のある共有サーバー上にあるため、セッションエンジンをオーバーライドしてセッションをデータベースに保存する必要があります。 PythonのWebフレームワークにも同様の機能があります。

私がPythonでウェブプログラミングを始めたとき、私は2つのことに気付きました。まず、PHPは多くの魔法を包み込み、初心者のプログラマー(2003年の私)が言語を学ぶのは簡単ですが、すべての仕組みを教えてくれません。そのため、Webアプリケーション、特にデータベース接続プーリング、URLマッピング、セッション、スレッド化に関する多くのトピックを研究していました。 PHP(と私が理解しているところからDjango)はあなたのためにそれを抽象化します。第二に、PHPは本当におならな言語です;)しかし、それは仕事を終わらせる!!

私は個人的にウェブ開発にCherryPyを使用しています。それはあなたがオンにできる「ツール」としてのセッション管理を持っています。

+0

@Sean:私は最初のデータベースプロジェクトをhttp://stackoverflow.com/questions/1168701/to-make-a-plan-for-my-first-mysql-projectにしています。 Pythonについては、実際の実装についてはほとんどわかっていないので、例えばCGI(私はそれが必要かどうかはわかりません)などです。 ---恐ろしいシンプルなディスカッションサイトを構築するのに役立つインスタンスコードや簡単なプロジェクトへのリンクなど、具体的なヒントを回答に追加できれば助かります。 –

+1

@マシ:「現実の世界」では、このプロジェクトは指定した時間枠には大きすぎます。あなたの制約の下で働いていたら、私はDjangoを使います。あなたはデベロップメントについて読むことができます(これはあなたが質問していると思う質問です)。 http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index 私はあなたをmod_wsgiに誘導しますApacheで。 –

+1

ああ、もう一つのこと...幸運! –

3

PythonはPHPのようなWeb言語ではないため、Web機能は組み込まれていません。しかし、この機能を追加する多くのモジュールがありますが、使用しているモジュールを特定する必要があります。ここで

により、たとえば、the Django frameworkでそれを使用することができます方法は次のとおりです。シンプルなWebフレームワークで

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!') 

セッションサポートがないかもしれません。セッションは自分自身を実装することは不可能ではありませんが、セッションIDを受信/送信してサポートを追加するスタンドアロンモジュールがあります(セッションIDはCookieに保存されます。ほとんどのWebフレームワークは

7

PHPから来て、Pythonに取り組んでいる人として、Djangoは、Web上でPythonを扱う良い方法です。これは、MVC frameworks in PHPを使用している場合に特に当てはまります。それは言った、Djangoはセッション管理のためのサポートが組み込まれており、ここに文書化されています

http://docs.djangoproject.com/en/dev/topics/http/sessions/

そして、好奇心の外に、私は無地のpythonとのセッション管理のために周りを見て取り、これを見つけた:

http://code.activestate.com/recipes/325484/

コメントで判断すると、これを処理するために実証済みのフレームワークを使用する方がよいでしょう。あなたはジャンゴに興味を持っていないなら、あなたもcheckout some of the others

5

あなたはWSGI互換性のある環境で動作するいずれかのWebフレームワークに縛られていないPython用ビーカーライブラリに探して検討するかもしれない:

http://beaker.groovie.org/

ビーカーをキャッシュするためのライブラリですWebアプリケーションやスタンドアロンのPythonスクリプトやアプリケーションで使用するためのセッションが含まれます。 WSGIミドルウェアにより、WSGIベースのWebアプリケーションで簡単にドロップインできます。また、Pythonベースのアプリケーションでの使いやすさのためのデコレータのキャッシングも可能です。

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=ABCDEFGHIJK;expires=Wednesday, 08-Aug-2025 23:59:59 GMT'>") 
    if str(lst_Matrix[0][1]) == "DeleteCookies": 
     print ("<meta http-equiv='Set-Cookie' content='TestUniversity=ABCDEFGHIJK;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>") 
+0

この例では、Cookieを送信しました。そのクッキーは実質的にセッションです。ランダム変数を送信し、参照用にサーバーに保存します。私はそれをデータベースに保存します。 PHPがセッションを行う方法の問題は、Apacheに保存するためにセッションが緩んでいるWebファームがある場合です。これは、セッションを追跡するためのより良い方法です。 –

関連する問題