2017-01-18 23 views
0

私はDjangoのsessioidトークンの長さを変更したいので、32文字の代わりに64文字のような狂ったものになります。私はそれがたくさんあることを知っていますが、それはできますか?このようなことをしない理由はありますか? DjangoのセッションIDトークンの長さを変更できますか?

は、私は、キーの長さが クラスのが SessionBase django.contrib.sessions.backendsで定義されているけど、私は、バックエンドの機能をオーバーライドしたり、それらを交換する方法の指示を見つけるように見えることはできません。

ps。私はWeb開発に慣れていないので、いくつかのドキュメントを理解するのは難しいです。 C++ではとても簡単でした...

+0

あなたはこれをやりたい理由を説明できますか? –

+0

確かに。短い答えは、私の「監督者」または私に仕事を与えてくれている人がそのようにしたいからです。私はそれが必要ではないと思っても、私は本当にそれをしない理由が必要なので、怠惰やスキルがないために抵抗のように見えません。サイバーセキュリティで働く経験はありません。私はWeb開発の初心者です。私は他のプログラムが使うAPIをやっています。私が学んだように、一般的なセッション認証がブラウザとAJAXに使われていますが、Djangoのセッションを使ってそれを行うように求められました。 – osirola

答えて

1

Djangoのサブクラス化はC++とまったく同じです。基本クラスから継承し、関連するメソッドをオーバーライドする新しいクラスを定義するだけで済みます。

セッションキーは、_get_new_session_keyメソッドで定義されています。すでに使用しているセッションバックエンド(例えば、db、ファイル、またはキャッシュバックエンド)から継承し、そのメソッドを定義する必要があります。たとえば:

from django.contrib.sessions.backends.db import SessionStore as OriginalSessionStore 

class SessionStore(OriginalSessionStore): 
    def _get_new_session_key(self): 
     "Returns session key that isn't being used." 
     while True: 
      session_key = get_random_string(64, VALID_KEY_CHARS) 
      if not self.exists(session_key): 
       break 
     return session_key 

今すぐあなたのSESSION_ENGINE設定で"path.to.module.with.overridden.class"を使用することができます。

+0

答えをありがとう。さて、** settings.py **には "SESSION_ENGINE = 'my_api.customsessionstore'"があり、** customsessionstore.py **には新しいクラスがあります。私はそれを動作させるために今何をする必要があるのか​​不思議です。ユーザーがログインすると、32秒のセッションIDが作成されます。 request.session.set_session_key()のようにログイン後に関数を呼び出す必要があるのですか、または実際にオーバーライドされたクラスを置き換える必要がありますか? – osirola

+0

私の間違いは、DjangoがクラスをSessionStoreと呼ぶことを期待しているように見えます。それで、あなたがインポートしたデフォルトのものをまだピックアップしていました。コードを更新して、今すぐ試してみてください。 –

+0

ありがとう、私は今働いている!私はあなたの答えを受け入れたとマークしました。 Djangoのsession_keyフィールドの長さが40に制限されていて、Djangoが親クラスのフィールドをオーバーライドする子クラスをサポートしていないことに気づいたので、私には多分無駄でしたか? 32より長く、私は何かを学んだ:) – osirola

関連する問題