Що таке сесія у Django

Що таке сесія у Django



Використання сесій Django

Джанго надає session framework, що підтримує анонімні та користувальницькі сесії. Session framework дозволяє зберігати довільні дані кожного відвідувача. Дані сеансу зберігаються на стороні сервера, а файли cookie містять session ID, якщо не використовується обробник сесій на основі файлів cookie. Проміжне підпрограмне забезпечення керує надсиланням та отриманням файлів cookie. За замовчуванням обробник сесій зберігає дані сесії в базі даних, але, як ви побачите далі, можна вибрати між різними обробниками сесій.

Щоб використовувати сесії, необхідно переконатися, що параметр MIDDLEWARE_CLASSES проекту містить 'django.contrib.sessions.middleware.SessionMiddleware'. Це проміжне програмне забезпечення керує сесіями і додається за замовчуванням під час створення нового проекту за допомогою команди startproject.

Проміжне програмне забезпечення дозволяє зробити поточну сесію доступною в об'єкті request. Доступ до поточної сесії можна отримати за допомогою request.session , використовуючи його аналогічно словнику Python для зберігання та вилучення даних сесії. Словник сесій приймає будь-який об'єкт Python, який може бути серіалізований в JSON. Можна задати змінну в сесії так:

request.session['foo'] = 'bar'

Вилучення session key:

request.session.get('foo')

Видалити key, що зберігається в session:

del request.session['foo']

Як ви бачили, ми щойно обробляли request.sessionяк стандартний словник Python.

При вході користувачів у сайт їхня анонімна сесія втрачається і створюється нова сесія для користувачів, які пройшли авторизацію. При зберіганні елементів в анонімній сесії, яку потрібно зберегти після входу користувачів до системи, потрібно буде скопіювати старі дані сесії на нову сесію.

results matching " "

No results matching " "

Documentation

Please take a few minutes to complete the 2024 Django Developers Survey.
Your feedback will help guide future efforts.

How to use sessions¶

Django забезпечує повну підтримку для anonymous sessions. The session framework lets you store and retrieve arbitrary data on a per-site-visitor basis. Це Store data на сервері сторони і abstracts повідомлення і отримання cookies. Cookies contain a session ID – not the data itself (unless you're using the cookie based backend).

Enabling sessions¶

Sessions є implemented via a piece of middleware .

Для сприятливої ​​session functionality, do the following:

  • Edit the MIDDLEWARE setting and make sure it contains 'django.contrib.sessions.middleware.SessionMiddleware' . Default settings.py created by django-admin startproject має SessionMiddleware activated.

Якщо ви не збираєтеся використовувати заходи, ви можете скористатися функцією сеансу середовищ line від MIDDLEWARE і 'django.contrib.sessions' з вашого INSTALLED_APPS . It’ll save you a невеликий bit of overhead.

Configuring the session engine¶

By default, Django stores sessions in your database (using the model django.contrib.sessions.models.Session ). Тому, що це є зручним, в деяких setups це значок, щоб переглянути реєстраційну службу в режимі десь, якщо Django може бути встановлений для сеансу служби даних на вашому файлісистеми або в вашому електронному архіві.

За допомогою database-backed sessions¶

Якщо ви хочете використовувати database-backed session, вам потрібно додати 'django.contrib.sessions' до вашого INSTALLED_APPS setting.

Після того, як ви налаштували вашу установку, керуйте системою.

Using cached sessions¶

Для більшої ефективності, вам може бути використано cache-based session backend.

Для того, щоб переглянути вашу мережу, використовуючи Django's cache system, я маю першу потребу в тому, щоб зробити ваш configured your cache; Виберіть cache documentation for details.

Ви повинні тільки використовувати cache-based sessions, якщо ви використовуєте Memcached або Redis cache backend.Local-memory cache backend необов'язковим є тривалий час, щоб отримати хороший вибір, і він буде скористатися використанням файлу або database sessions безпосередньо за допомогою кнопки за допомогою файлу або database cache backends. cache backend is NOT multi-process safe, вонипопередньо не є хорошим вибором для production environments.

Якщо ви маєте кілька повідомлень, що були визначені в CACHES , Django буде використовувати додаткову плату, щоб використати інший список, натиснути SESSION_CACHE_ALIAS на name of that cache.

Після того, як ваші файли cache configured, ви маєте налаштувати між database-backed cache або non-persistent cache.

Завантажені файли backend ( cached_db ) використовуються для отримання-довідки про cache – session writes є applied to both the database and cache, в тому порядку, коли повідомлень про файли повідомлень, exception is handled and logged via the sessions logger , an otherwise successful write Operation.

Handling and logging of exceptions when writing to the cache був added.

Сесії reads use the cache, або database if the data has been evicted from the cache. sessions.

Cache backend ( cache ) stores session data only in your cache . restarted, and it will mean session data is lost, including logging out users.

Cache backend може бути persistent by using a persistent cache, так само як Redis with appropriate configuration.

Using file-based sessions¶

Для використання файлу-базованих додатків, натисніть на SESSION_ENGINE setting to "django.contrib.sessions.backends.file" .

Ви можете встановити SESSION_FILE_PATH setting (який натискати на output from tempfile.gettempdir() , most likely /tmp ) до control where Django stores session files. Будь-яка інформація про те, що ваш веб-сервер має змогу скористатися ним, щоб отримати і отримати це місце.

За допомогою cookie-based sessions¶

Для використання cookies-based sessions, виберіть SESSION_ENGINE setting to "django.contrib.sessions.backends.signed_cookies" . The session data will be stored using Django's tools for cryptographic signing and the SECRET_KEY setting.

Це recomended to leave the SESSION_COOKIE_HTTPONLY setting on True to prevent access to the stored data from JavaScript.

The session data is signed but not encrypted

При використанні cookies backend the session data can be read by the client.

A MAC (Message Authentication Code) використовується для захисту даних за змінами до клієнта, так, що на session data буде заблоковано, коли буде здійснено. Те ж саме звільнення зроблено, якщо клієнт зберігає cookie (e.g. ваш user's browser) can't store all of the session cookie and drops data. Even though Django compresses the data, it's still entirely possible to exceed the common limit of 4096 bytes per cookie.

No freshness guarantee

Помітно, що, якщо MAC може гарантувати дійсність даних (що він був створений за вашим сайтом, і немає певного значення), і досконалість даних (що це все є і коректно), це може бути гарантія freshness i.e. Те, що ви стаєте запропонувати останній, що ви попросите клієнта. Це означає, що для деяких використовуваних session data, cookie backend might open you up to replay attacks. Нема інших session backends, які керують сервером-сторінка запису їхньої session і неправильно це, коли user logs out, cookie-based session не є invalidated, коли user logs out.Це, якщо attacker steals a user's cookie, вони можуть використовувати, що cookie to login as that user even if the user logs out. Cookies буде лише виявлено як 'сталь', якщо ви будете продавати, що ваш SESSION_COOKIE_AGE .

Performance

Власне, розмір cookie може мати impact на частоті свого сайту.

Using sessions in views¶

Коли SessionMiddleware is activated, будь-який HttpRequest object – перший argument до any Django view function – буде мати session attribute, which is a dictionary-like object.

Ви можете read it і повідомити request.session на будь-якому місці в вашому вигляді. Ви можете edit it multiple times.

class backends.base. SessionBase ¶

Це являє собою основу класу для всіх завдань об'єктів. It has following standard dictionary methods:

Example: fav_color = request.session['fav_color']

Example: request.session['fav_color'] = 'blue'

Example: del request.session['fav_color'] . Цей рівень KeyError if the given key isn’t already in the session.

Example: 'fav_color' in request.session

get ( key , default = None )¶ aget ( key , default = None

Asynchronous version: aget()

Example: fav_color = request.session.get('fav_color', 'red')

aget() function був added.

Example: await request.session.aset('fav_color', 'red')

update ( dict )¶ aupdate ( dict

Asynchronous version: aupdate()

aupdate() function був added.

Asynchronous version: apop()

Example: fav_color = request.session.pop('fav_color', 'blue')

apop() function був added.

Asynchronous version: akeys()

akeys() function був added.

Asynchronous version: avalues()

avalues() function був added.

Asynchronous version: ahas_key()

ahas_key() function був added.

Asynchronous version: aitems()

aitems() function був added.

Asynchronous version: asetdefault()

asetdefault() function був added.

It also has these methods:

Asynchronous version: aflush()

Deletes the current session data від the session and deletes the session cookie.Це використовується, якщо ви хочете, щоб prevised session data can't be accessed again from the user's browser (for example, the django.contrib.auth.logout() function calls it).

aflush() function був added.

Asynchronous version: aset_test_cookie()

Sets a test cookie to determine whether the user’s browser supports cookies. Дозволяє зробити cookie роботу, ви не можете тестувати цей необхідний користувачеві next page request. See Setting test cookie below for more information.

aset_test_cookie() function був added.

Asynchronous version: atest_cookie_worked()

Returns either True or False , depending on whether the user's browser accepted the test cookie. Використовуючи файли cookie, ви маєте call set_test_cookie() або aset_test_cookie() на попередньому, окремій сторінці. See Setting test cookie below for more information.

atest_cookie_worked() function був added.

Asynchronous version: adelete_test_cookie()

Deletes the test cookie. Натисніть на те, щоб скористатися після вас.

adelete_test_cookie() function був added.

Натисніть на значення SESSION_COOKIE_AGE . Це може бути overridden в custom session backend.

set_expiry ( value )¶ aset_expiry ( value

Asynchronous version: aset_expiry()

Sets the expiration time for the session. Ви можете прочитати номер з різних розмірів:

  • Якщо значення є integer, session буде expire after that many seconds of inactivity. Для прикладу, calling request.session.set_expiry(300) мав змогу виконувати session expire в 5 хвилин.
  • Якщо значення є datetime або timedelta object, the session буде expire at that specific date/time.
  • If value is 0 , the user’s session cookie will expire when the user’s web browser is closed.
  • Якщо значення є None , session reverts до використання the global session expiry policy.

Reading asession is not considered activity for expiration purposes. Session expiration is computed from the last time the session was modified.

aset_expiry() function був added.

Asynchronous version: aget_expiry_age()

Натисніть на номер seconds until this session expires. Для занять без будь-якого виховання (або цей набір до expire на close close), це буде однакове SESSION_COOKIE_AGE .

Це функція accepts two optional keyword arguments:

  • modification : Last modification of the session, as a datetime object. Defaults до поточного часу.
  • expiry : expiry information for the session, as a datetime object, an int (in seconds), or None . Вказівки до значення, встановлені в session by set_expiry() / aset_expiry() , якщо є один, або None .

Цей метод використовується за допомогою backends, щоб визначити session expiry age in seconds when saving the session. Це не справді впроваджено для використання поза межами цього контексту.

In particular, while it is possible to determine the remaining lifetime of a session just when You have the correct modification value and expiry is set as datetime object, where you do dove the modification value, it is more straight-forward to calculate the expiry by-hand:

expires_at
=
modification
+
timedelta(seconds=settings.SESSION_COOKIE_AGE)

aget_expiry_age() function був added.

Asynchronous version: aget_expiry_date()

Returns the date this session буде expire. Для запрошень без будь-якого expiration (або цей набір до expire на close close), це буде еквівалент date SESSION_COOKIE_AGE seconds from now.

Ця функція припускає те ж саме ключове слово arguments як get_expiry_age() , і подібні notes на usage apply.

aget_expiry_date() function був added.

Asynchronous version: aget_expire_at_browser_close()

Відновити її True or False , depending on whether the user's session cookie буде expire when the user's web browser is closed.

aget_expire_at_browser_close() function був added.

Asynchronous version: aclear_expired()

Removes expired sessions від session store. Цей class method is called by clearsessions .

aclear_expired() function був added.

Asynchronous version: acycle_key()

Створюйте новий session key при відновленні поточної session data. django.contrib.auth.login() calls цей метод до mitigate до session fixation.

acycle_key() function був added.

Session serialization¶

By default, Django serializes session data using JSON. Ви можете використовувати SESSION_SERIALIZER налаштування для customize session serialization format. Будь-який з кави вписується в Write your own serializer , we highly recommend sticking with JSON serialization особливо якщо ви використовуєте cookie backend.

Для прикладу, тут випадок сценарію, якщо ви використовуєте pickle to serialize session data. Якщо ви використовуєте заголовок cookie session backend і SECRET_KEY (або будь-який key of SECRET_KEY_FALLBACKS ) є відомий як attacker (буде ні в якому разі небезпека vulnerability в Django, який повинен бути виконаний в ліки), session which, when unpickled, executes arbitrary code on the server. Технологія для того, щоб бути простим і легко доступним на Інтернеті. Крім того, cookie session передача сигналів cookie-завантаженого data до запобігання tampering, a SECRET_KEY ліки негайно escalates до remote code execution vulnerability.

Bundled serializers¶

A wrapper around the JSON serializer від django.core.signing . Може бути лише послідовність основних даних типів.

In addition, як JSON supports тільки string keys, note that using non-string keys in request.session won’t work as expected:

>>>
# initial assignment
>>>
request.session[0]
=
"bar"
>>>
# subsequent requests following serialization & deserialization
>>>
# of session data
>>>
request.session[0]
# KeyError
>>>
request.session["0"]
'bar'

Схоже, дані, які можуть бути внесені в JSON, не є UTF8 bytes як '\xd9' (які висловлюються UnicodeDecodeError ), можуть бути збережені.

Подивіться на ваші власні серіалізатор секції для більшої інформації про обмеження JSON serialization.

Write your own serializer¶

Зверніть увагу на те, що JSONSerializer не може бути handle arbitrary Python data types.Як існують обставини, є trade-off між convenience and security. Якщо ви збираєтеся до магазину більше додаткових типів даних, включаючи терміни і денний в JSON запрошених сеансах, ви повинні отримати для того, щоб отримати оригінал (або конвертувати такі значення на JSON послідовний об'єкт до того, як вибрати їх в request.session ). While serializing ці значення є можливим правом наперед (DjangoJSONEncoder може бути сприятливим), писав записник, що може бути вірно, щоб отримати той самий, що ви збираєтеся в більш дрібні. Для прикладу, ви рахуєте ризик відновлення datetime, що було насправді string, що just happened to be в той же формат chosen для datetime s).

Ваша послідовність класу повинна реалізувати два методи, dumps(self, obj) і loads(self, data) , до оригіналу і deserialize the dicary of session data, respectively.

Session object guidelines¶

  • Use normal Python strings as dictionary keys on request.session . Це більше, ніж конвенція, а hard-and-fast rule.
  • Сезонний slovník keys, що починають з підсвічуванням, служать для внутрішнього використання за допомогою Django.
  • Не можна override request.session with a new object, don't access or set its attributes. Use it like a Python dictionary.

Examples¶

Цей simplistic view sets has_commented variable to True after a user posts a comment. It doesn’t let a user post a comment more than once:

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

Цей simplistic view logs in “member” of the site:

def
login(request):
m
=
Member.objects.get(username=request.POST["username"])
if
m.check_password(request.POST["password"]):
request.session["member_id"]
=
m.id
return
HttpResponse("You're logged in.")
else:
return
HttpResponse("Your username і password didn't match.")

… And this one logs a member out, за допомогою login() above:

def
logout(request):
try:
del
request.session["member_id"]
except
KeyError:
pass
return
HttpResponse("You're logged out.")

Standard django.contrib.auth.logout() функція в даний час вважається більшою мірою, якщо це не буде ідентифікувати data leakage. It calls the flush() method of request.session . We are using this example as a demonstration of how to work with session objects, no as a full logout() implementation.

Setting test cookies¶

Як convenience, Django дає змогу вивчати те, що користувачі браузера приймають cookies. Call the set_test_cookie() метод request.session in a view, і call test_cookie_worked() in a subsequent view – not in the same view call.

Це пов'язане складання між set_test_cookie() і test_cookie_worked() необхідне для того, щоб працювати cookies. Коли ви збираєтеся cookie, ви можете зараз, щоб браузер прийняв, що цей браузер next request.

It's good practice use delete_test_cookie() clean up after yourself. Do this after you’ve verified that the test cookie worked.

Here’s a typical usage example:

from
django.http
import
HttpResponse
from
django.shortcuts
import
render
def
login(request):
if
request.метод
==
"POST":
if
request.session.test_cookie_worked():
request.session.delete_test_cookie()
return
HttpResponse("You're logged in.")
else:
return
HttpResponse("Please enable cookies і try again.")
request.session.set_test_cookie()
return
render(request,
"foo/login_form.html")

Додаток для налаштування тесту cookies в асинхронному вигляді функцій був приєднаний.

Using sessions out of views¶

Наведені в цьому розділі import the SessionStore об'єкт прямо з django.contrib.sessions.backends.db backend. У вашому другому коді, ви повинні вважати importing SessionStore від session engine designated by SESSION_ENGINE , as below:

>>>
from
importlib
import
import_module
>>>
from
django.conf
import
settings
>>>
SessionStore
=
import_module(settings.SESSION_ENGINE).SessionStore

У API є можливим для manipulation session data outside of a view:

>>>
from
django.contrib.sessions.backends.db
import
SessionStore
>>>
s
=
SessionStore()
>>>
# stored as seconds since epoch since datetimes не є serializable в JSON.
>>>
s["last_login"]
=
1376587691
>>>
s.create()
>>>
s.session_key
'2b1189a188b44ad18c35e113ac6ceead'
>>>
s
=
SessionStore(session_key="2b1189a188b44ad18c35e113ac6ceead")
>>>
s["last_login"]
1376587691

SessionStore.create() is designed to create a new session (i.e. one not loaded from the session store and with session_key=None ). save() is designed to save an existing session (i.e. one loaded from the session store). Calling save() on a new session mai also work but has as male chance of generating a session_key that collides with existing one. create() calls save() and loops until an unused session_key is generated.

Якщо ви використовуєте django.contrib.sessions.backends.db backend, її session є стандартним Django model. The Session model is defined in django/contrib/sessions/models.py. Тому, що це normal model, ви можете access sessess using normal Django database API:

>>>
from
django.contrib.sessions.models
import
Session
>>>
s
=
Session.objects.get(pk="2b1189a188b44ad18c35e113ac6ceead")
>>>
s.expire_date
datetime.datetime(2005, 8, 20, 13, 35, 12)

Note that you’ll потребує call get_decoded() to get the session dictionary. Це необхідний тому, що мова йде про оголошений формат:

>>> s.session_data 'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj. ' >>> s.get_decoded()

When sessions are saved¶

Будь-який, Django тільки натиснути на session database when the session був би modified – that is if any of its dictionary values ​​have been assigned or deleted:

# Session is modified.
request.session["foo"]
=
"bar"
# Session is modified.
del
request.session["foo"]
# Session is modified.
request.session["foo"]
=
<>
# Gotcha: Session is NOT modified, because this alters
# request.session['foo'] instead of request.session.
request.session["foo"]["bar"]
=
"baz"

У останньому випадку з вищенаведеного прикладу, ми можемо повідомити про те, що session object explicitly that it has been modified by setting the modified attribute on the session object:

request.session.modified
=
True

Для зміни цього default behavior, виберіть SESSION_SAVE_EVERY_REQUEST setting to True . Якщо вибрати цю функцію, Django буде захищати session до database on every single request.

Зверніть увагу на те, що session cookie is only sent when a session has been created or modified. If SESSION_SAVE_EVERY_REQUEST is True , session cookie буде бути затверджено на всі потреби.

У той же час, випадки частина з cookie session updated each time the session cookie is sent.

The session is not saved if the response's status code is 500.

Browser-length sessions vs. persistent sessions¶

Ви можете контролювати, колисесія framework використовує browser-length sessions vs. persistent sessions with SESSION_EXPIRE_AT_BROWSER_CLOSE setting.

Залежно від того, SESSION_EXPIRE_AT_BROWSER_CLOSE є набір до False , які засоби передачі файлів cookie будуть доступні в users' browsers для тривалого використання SESSION_COOKIE_AGE . Застосувати це, якщо ви не збираєтеся, щоб отримати в log в кожний час, щоб відкрити браузер.

Якщо SESSION_EXPIRE_AT_BROWSER_CLOSE is set to True , Django буде використовувати browser-length cookies – cookie, що expire як ти, як user closes їх браузер. Використовуйте це, якщо вам потрібні люди, щоб отримати в електронній повіці, коли ви отримаєте браузер.

Цей настанова є Global Default і може бути перевірений на первісній рівні, explicitly call the set_expiry() метод request.session як описано в using sessions in views.

Деякі браузери (Chrome, for example) виконують settings, які дозволяють користувачам до постійного браузера, після закінчення і повторного перегляду браузера. У деяких випадках, це може бути interfere з SESSION_EXPIRE_AT_BROWSER_CLOSE налагодження і проведення випробувань від expiring on browser close.Відомості про те, що при тестуванні Django applications які мають SESSION_EXPIRE_AT_BROWSER_CLOSE setting enabled.

Clearing the session store¶

Як користувачі створюють нові засідання на вашому веб-сайті, session data може бути зроблено в вашому магазині. Якщо ви використовуєте backend database, django_session database table will grow. Якщо ви застосовуєте файл backend, ваш temporary directory буде позначатися на збільшення числа файлів.

Для того, щоброзглянути цей проблему, з'ясуйте, які happens with the database backend. Коли user logs in, Django adds a row to the django_session database table. Django updates this row each time the session data changes. Якщо user logs out manually, Django deletes the row. But if the user does not log out, the row never gets deleted. Схожі процеси happens with file backend.

Django does not забезпечує автоматичне urging expired sessions. Therefore, it's your job для purge expired sessions on a regular basis. Django забезпечує clean-up management command for this purpose: clearsessions . It's recomended to call цей список на регулярній основі, для прикладу, як daily cron job.

Зверніть увагу на те, що cache backend isn’t vulnerable до цього питання, тому що caches автоматично delete stale data. Neither is the cookie backend, because the session data is stored by the users’ browsers.

Settings¶

A few Django settings give you control over session behavior:

  • SESSION_CACHE_ALIAS
  • SESSION_COOKIE_AGE
  • SESSION_COOKIE_DOMAIN
  • SESSION_COOKIE_HTTPONLY
  • SESSION_COOKIE_NAME
  • SESSION_COOKIE_PATH
  • SESSION_COOKIE_SAMESITE
  • SESSION_COOKIE_SECURE
  • SESSION_ENGINE
  • SESSION_EXPIRE_AT_BROWSER_CLOSE
  • SESSION_FILE_PATH
  • SESSION_SAVE_EVERY_REQUEST
  • SESSION_SERIALIZER

Session security¶

Subdomains within site є able to set cookie on the client for the whole domain. Ці процедури можуть бути визначені, якщо файли cookie можуть бути використані з subdomains, які не контролюються trusted users.

Для прикладу, для attacker можна log в good.example.com і отримати правильну схему для свого рахунку. Якщо аттакер має контроль над bad.example.com , вони можуть використовуватися для того , щоб їх session key для вашого домену , які використовуються для набору cookies на *.example.com . Якщо ви збираєтеся good.example.com , ви будете отримувати участь в attacker і мій індивідуально вводити ваші надійні особисті дані (e.g. credit card info) в attacker's account.

Інші можливі спроби можуть бути якщо good.example.com sets its SESSION_COOKIE_DOMAIN в "example.com", які можуть викликати session cookies від цього сайту для того, щоб бути в bad.example.com .

Technical details¶

  • The sesion dictionary accepts any json serializable value when using JSONSerializer .
  • Session data is stored in database table named django_session .
  • Django тільки sends a cookie if it needs to. Якщо ви не маєте будь-якої session data, це буде session cookie.

The SessionStore object¶

Коли працює з проміжками міжнародно, Django використовує session store object from the corresponding session engine. Під час спостереження, клас класу об'єкта класу є назвою SessionStore і розташований в module designated by SESSION_ENGINE .

Всі SessionStore subclasses доступні в Django реалізуючи наступні методи manipulation methods:

  • exists()
  • create()
  • save()
  • delete()
  • load()
  • clear_expired()

Така синхронна interface для цих методів забезпечена загоряння ним з sync_to_async() . Вони можуть бути реалізовані безпосередньо, якщо асинк-нативні дії є доступними:

  • aexists()
  • acreate()
  • asave()
  • adelete()
  • aload()
  • aclear_expired()

В ордер для будівництва custom session engine або customize existing one, you may create a new class inheriting from SessionBase or any other existing SessionStore class.

Ви можете виконати session engines, but doing so with database-backed session engines generally requires some extra effort (see the next section for details).

aexists() , acreate() , asave() , adelete() , aload() , і aclear_expired() методів були added.

Extending database-backed session engines¶

Створення custom database-backed session engine built upon those included in Django (namely db and cached_db ) можуть бути внесені до внесення AbstractBaseSession and either SessionStore class.

AbstractBaseSession and BaseSessionManager є важливим від django.contrib.sessions.base_session з тим, що вони можуть бути importовані без включення django.contrib.sessions в INSTALLED_APPS .

class base_session. AbstractBaseSession ¶

The abstract base session model.

Primary key. Поле itself mai contain up to 40 characters. Сучасна реалізація генерується 32-character string (а random sequence of digits and lowercase ASCII letters).

На string розташований ancoded і serialized session dictionary.

A datetime designating when the session expires.

Записані конференції не можуть бути доступні для користувача, тому що вони можуть бути зареєстровані в 데이터베이스, необов'язково знижуються курси управління командою.

Returns a session store class to be used з цим session model.

Returns decoded session data.

Decoding is performed by the session store class.

Ви можете customize the model manager subclassing BaseSessionManager :

class base_session. BaseSessionManager ¶ encode ( session_dict

Відновлюють передачу піктограми серіалізованих і підписаних як string.

Encoding is performed by the session store class tied to a model class.

save ( session_key , session_dict , expire_date

Зберегти session data для повідомленого session key, або deletes session в разі data is empty.

Customization of SessionStore classes є спрямованими наперевищення методів і властивостей зазначених нижче:

class backends.db. SessionStore¶

Implements database-backed session store.

Зверніть увагу на цей метод, щоб звернути увагу на custom session model if you need one.

Натисніть на нову позицію проміжної моделі об'єкта, який представляє поточний сесія штату.

Завершуючи цей метод забезпечується здатність до modify session model data before it’s saved to database.

class backends.cached_db.

Implements cached database-backed session store.

Prefix added to session key to build a cache key string.

Example¶

Докладніше, як показано на custom database-backed session engine, що включає aditional database column to store an account ID (this providing an option to query the database for all active sessions for an account):

from
django.contrib.sessions.backends.db
import
SessionStore
as
DBStore
from
django.contrib.sessions.base_session
import
AbstractBaseSession
from
django.db
import
models
class
CustomSession(AbstractBaseSession):
account_id
=
models.IntegerField(null=True,
db_index=True)
@classmethod
def
get_session_store_class(cls):
return
SessionStore
class
SessionStore(DBStore):
@classmethod
def
get_model_class(cls):
return
CustomSession
def
create_model_instance(self,
data):
obj
=
super().create_model_instance(data)
try:
account_id
=
int(data.get("_auth_user_id"))
except
(ValueError,
TypeError):
account_id
=
None
obj.account_id
=
account_id
return
obj

Якщо ви є migrating з Django's built-in cached_db session store to a custom one based on cached_db , ви повинні перевірити, як клавіатуру key prefix в order to prevent a namespace clash:

class
SessionStore(CachedDBStore):
cache_key_prefix
=
"mysessions.custom_cached_db_backend"
# .

Session IDs in URLs¶

The Django sessions framework є entirely, і solely, cookie-based. it makes your site vulnerable to session-ID theft via the “Referer” header.

Additional Information

Схожі статті

  • Коли сесія у заочників узимку
  • Що таке таблиця об'єкт об'єкт
  • Що таке Кастер у підвісці
  • Що таке соус Шою
  • Що таке МСФЗ простими словами
  • Що таке сорт м'яса
  • Що таке Фасадна панель для посудомийної машини
  • Що таке джунглі історія 5 клас
  • Недавні статті

  • Чому взуття скрипить при ходьбі
  • Коли день народження у стрічці
  • Чи можна кішці їсти сіль
  • Варіанти планування ділянки 15 соток прямокутної форми
  • Що означає півмісяця знак
  • Рейсмусовий верстат для чого
  • У якому віці парують свиней
  • У чому полягає принцип нарахування та у яких випадках він застосовується