{"title":"Hur man använder sessioner","version":"6.0","locale":"sv","docname":"topics/http/sessions","url":"/sv/6.0/topics/http/sessions/","canonical":"https://djangodocs.dev/sv/6.0/topics/http/sessions/","summary":"Django ger fullt stöd för anonyma sessioner. Med sessionsramverket kan du lagra och hämta godtyckliga data per webbplatsbesökare. Det lagrar data på serversidan och…","html":"<span id=\"how-to-use-sessions\"></span><h1>Hur man använder sessioner<a class=\"heading-anchor\" href=\"#module-django.contrib.sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django ger fullt stöd för anonyma sessioner. Med sessionsramverket kan du lagra och hämta godtyckliga data per webbplatsbesökare. Det lagrar data på serversidan och abstraherar sändning och mottagning av cookies. Cookies innehåller ett sessions-ID - inte själva datan (såvida du inte använder <a class=\"reference internal\" href=\"#cookie-session-backend\"><span class=\"std std-ref\">cookie based backend</span></a>).</p>\n<section id=\"enabling-sessions\">\n<h2>Möjliggörande av sessioner<a class=\"heading-anchor\" href=\"#enabling-sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Sessioner implementeras via en del av <a class=\"reference internal\" href=\"/sv/6.0/ref/middleware/\"><span class=\"doc\">middleware</span></a>.</p>\n<p>Gör följande för att aktivera sessionsfunktionen:</p>\n<ul class=\"simple\">\n<li><p>Redigera inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> och se till att den innehåller <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sessions.middleware.SessionMiddleware'</span></code>. Standardinställningen <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> som skapades av <code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">startproject</span></code> har <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> aktiverad.</p></li>\n</ul>\n<p>Om du inte vill använda sessioner kan du lika gärna ta bort raden <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> från <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> och <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sessions'</span></code> från din <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>. Det kommer att spara dig en liten bit av overhead.</p>\n</section>\n<section id=\"configuring-the-session-engine\">\n<span id=\"configuring-sessions\"></span><h2>Konfigurera sessionsmotorn<a class=\"heading-anchor\" href=\"#configuring-the-session-engine\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Som standard lagrar Django sessioner i din databas (med hjälp av modellen <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.sessions.models.Session</span></code>). Även om detta är bekvämt, är det i vissa inställningar snabbare att lagra sessionsdata någon annanstans, så Django kan konfigureras för att lagra sessionsdata på ditt filsystem eller i din cache.</p>\n<section id=\"using-database-backed-sessions\">\n<h3>Använda databasstödda sessioner<a class=\"heading-anchor\" href=\"#using-database-backed-sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du vill använda en databasstödd session måste du lägga till <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sessions'</span></code> i din <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>-inställning.</p>\n<p>När du har konfigurerat din installation kör du <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></code> för att installera den enda databastabell som lagrar sessionsdata.</p>\n</section>\n<section id=\"using-cached-sessions\">\n<span id=\"cached-sessions-backend\"></span><h3>Använda cachade sessioner<a class=\"heading-anchor\" href=\"#using-cached-sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För bättre prestanda kanske du vill använda en cache-baserad sessionsbackend.</p>\n<p>För att lagra sessionsdata med hjälp av Djangos cachesystem måste du först se till att du har konfigurerat din cache; se <a class=\"reference internal\" href=\"/sv/6.0/topics/cache/\"><span class=\"doc\">cache documentation</span></a> för detaljer.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Du bör endast använda cache-baserade sessioner om du använder Memcached eller Redis cache-backend. Backend för lokal minnescache lagrar inte data tillräckligt länge för att vara ett bra val, och det går snabbare att använda fil- eller databassessioner direkt i stället för att skicka allt genom backend för fil- eller databascache. Dessutom är backend för lokal minnescache INTE säker för flera processer och är därför förmodligen inte ett bra val för produktionsmiljöer.</p>\n</aside>\n<p>Om du har flera cacher definierade i <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-CACHES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHES</span></code></a> kommer Django att använda standardcachen. För att använda en annan cache, ställ in <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_CACHE_ALIAS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_CACHE_ALIAS</span></code></a> till namnet på den cachen.</p>\n<p>När cachen är konfigurerad måste du välja mellan en databasstödd cache eller en icke-beständig cache.</p>\n<p>Den cachelagrade databasbackenden (<code class=\"docutils literal notranslate\"><span class=\"pre\">cached_db</span></code>) använder en genomskrivningscache – sessionsskrivningar tillämpas på både databasen och cachen, i den ordningen. Om skrivningen till cacheminnet misslyckas hanteras och loggas undantaget via <a class=\"reference internal\" href=\"/sv/6.0/ref/logging/#django-contrib-sessions-logger\"><span class=\"std std-ref\">sessions logger</span></a>, för att undvika att en annars lyckad skrivoperation misslyckas.</p>\n<p>Sessionsläsningar använder cacheminnet eller databasen om data har hämtats från cacheminnet. För att använda denna backend, sätt <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_ENGINE</span></code></a> till <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django.contrib.sessions.backends.cached_db&quot;</span></code>, och följ konfigurationsinstruktionerna för <a class=\"reference internal\" href=\"#using-database-backed-sessions\">använda sessioner med stöd av databas</a>.</p>\n<p>Cache-backend (<code class=\"docutils literal notranslate\"><span class=\"pre\">cache</span></code>) lagrar sessionsdata endast i din cache. Detta är snabbare eftersom det undviker databaspersistens, men du måste tänka på vad som händer när cachedata evakueras. Evakuering kan inträffa om cachen fylls eller cacheservern startas om, och det innebär att sessionsdata går förlorade, inklusive utloggning av användare. För att använda denna backend, ställ in <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_ENGINE</span></code></a> till <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django.contrib.sessions.backends.cache&quot;</span></code>.</p>\n<p>Cachebackend kan göras beständig genom att använda en beständig cache, t.ex. Redis med lämplig konfiguration. Men om inte din cache definitivt är konfigurerad för tillräcklig uthållighet, välj den cachade databasbackend. På så sätt undviker du kantfall som orsakas av opålitlig datalagring i produktionen.</p>\n</section>\n<section id=\"using-file-based-sessions\">\n<h3>Använda filbaserade sessioner<a class=\"heading-anchor\" href=\"#using-file-based-sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du vill använda filbaserade sessioner ställer du in <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_ENGINE</span></code></a> till <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django.contrib.sessions.backends.file&quot;</span></code>.</p>\n<p>Du kanske också vill ange inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_FILE_PATH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_FILE_PATH</span></code></a> (som standard är utdata från <code class=\"docutils literal notranslate\"><span class=\"pre\">tempfile.gettempdir()</span></code>, troligen <code class=\"docutils literal notranslate\"><span class=\"pre\">/tmp</span></code>) för att styra var Django lagrar sessionsfiler. Se till att kontrollera att din webbserver har läs- och skrivbehörighet till denna plats.</p>\n</section>\n<section id=\"using-cookie-based-sessions\">\n<span id=\"cookie-session-backend\"></span><h3>Använda cookie-baserade sessioner<a class=\"heading-anchor\" href=\"#using-cookie-based-sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För att använda cookies-baserade sessioner, sätt inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_ENGINE</span></code></a> till <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django.contrib.sessions.backends.signed_cookies&quot;</span></code>. Sessionsdata kommer att lagras med hjälp av Djangos verktyg för <a class=\"reference internal\" href=\"/sv/6.0/topics/signing/\"><span class=\"doc\">cryptographic signing</span></a> och inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY</span></code></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Vi rekommenderar att du låter <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_HTTPONLY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_HTTPONLY</span></code></a> vara inställd på <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> för att förhindra åtkomst till lagrade data från JavaScript.</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p><strong>Sessionsuppgifterna är signerade men inte krypterade</strong></p>\n<p>Vid användning av cookies backend kan sessionsdata läsas av klienten.</p>\n<p>En MAC (Message Authentication Code) används för att skydda data mot ändringar av klienten, så att sessionsdata ogiltigförklaras när de manipuleras. Samma ogiltigförklaring sker om klienten som lagrar cookien (t.ex. din användares webbläsare) inte kan lagra alla sessionscookies och droppar data. Även om Django komprimerar data är det fortfarande fullt möjligt att överskrida den <span class=\"target\" id=\"index-2\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc2965.html#section-5.3\"><strong>vanliga gränsen på 4096 byte</strong></a> per cookie.</p>\n<p><strong>Ingen färskhetsgaranti</strong></p>\n<p>Observera också att även om MAC kan garantera datans äkthet (att den genererats av din webbplats och inte av någon annan) och datans integritet (att allt finns där och är korrekt), kan den inte garantera färskhet, dvs. att du får tillbaka det senaste du skickade till klienten. Detta innebär att för vissa användningar av sessionsdata kan cookie-backend öppna upp för <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Replay_attack\">replay attacks</a>. Till skillnad från andra sessionsbackends som registrerar varje session på serversidan och ogiltigförklarar den när en användare loggar ut, ogiltigförklaras inte cookie-baserade sessioner när en användare loggar ut. Om en angripare stjäl en användares cookie kan han eller hon alltså använda den cookien för att logga in som den användaren även om användaren loggar ut. Cookies kommer endast att upptäckas som ”föråldrade” om de är äldre än din <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_AGE</span></code></a>.</p>\n<p><strong>Prestanda</strong></p>\n<p>Slutligen kan storleken på en cookie påverka hastigheten på din webbplats.</p>\n</aside>\n</section>\n</section>\n<section id=\"using-sessions-in-views\">\n<h2>Använda sessioner i vyer<a class=\"heading-anchor\" href=\"#using-sessions-in-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> är aktiverat kommer varje <a class=\"reference internal\" href=\"/sv/6.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a>-objekt - det första argumentet till en Django-vyfunktion - att ha ett <code class=\"docutils literal notranslate\"><span class=\"pre\">ession</span></code>-attribut, som är ett ordboksliknande objekt.</p>\n<p>Du kan läsa den och skriva till <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session</span></code> när som helst i din vy. Du kan redigera den flera gånger.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">backends.base.</span></span><span class=\"sig-name descname\"><span class=\"pre\">SessionBase</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Detta är basklassen för alla sessionsobjekt. Den har följande standardmetoder för ordböcker:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.__getitem__\">\n<span class=\"sig-name descname\"><span class=\"pre\">__getitem__</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.__getitem__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Exempel: <code class=\"docutils literal notranslate\"><span class=\"pre\">fav_color</span> <span class=\"pre\">=</span> <span class=\"pre\">request.session['fav_color']</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.__setitem__\">\n<span class=\"sig-name descname\"><span class=\"pre\">__setitem__</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.__setitem__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Exempel: <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session['fav_color']</span> <span class=\"pre\">=</span> <span class=\"pre\">'blue'</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.__delitem__\">\n<span class=\"sig-name descname\"><span class=\"pre\">__delitem__</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.__delitem__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Exempel: <code class=\"docutils literal notranslate\"><span class=\"pre\">del</span> <span class=\"pre\">request.session['fav_color']</span></code>. Detta ger upphov till <code class=\"docutils literal notranslate\"><span class=\"pre\">KeyError</span></code> om den angivna <code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> inte redan finns i sessionen.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.__contains__\">\n<span class=\"sig-name descname\"><span class=\"pre\">__contains__</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.__contains__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Exempel: <code class=\"docutils literal notranslate\"><span class=\"pre\">'fav_color''</span> <span class=\"pre\">i</span> <span class=\"pre\">request.session</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.get\">\n<span class=\"sig-name descname\"><span class=\"pre\">get</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.get\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aget\">\n<span class=\"sig-name descname\"><span class=\"pre\">aget</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aget\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aget()</span></code></p>\n<p>Exempel: <code class=\"docutils literal notranslate\"><span class=\"pre\">fav_color</span> <span class=\"pre\">=</span> <span class=\"pre\">request.session.get('fav_color',</span> <span class=\"pre\">'red')</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aset\">\n<span class=\"sig-name descname\"><span class=\"pre\">aset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Exempel: <code class=\"docutils literal notranslate\"><span class=\"pre\">await</span> <span class=\"pre\">request.session.aset('fav_color',</span> <span class=\"pre\">'red')</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.update\">\n<span class=\"sig-name descname\"><span class=\"pre\">update</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">dict</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.update\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aupdate\">\n<span class=\"sig-name descname\"><span class=\"pre\">aupdate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">dict</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aupdate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aupdate()</span></code></p>\n<p>Exempel: <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session.update({'fav_color':</span> <span class=\"pre\">'red'})</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.pop\">\n<span class=\"sig-name descname\"><span class=\"pre\">pop</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">__not_given</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.pop\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.apop\">\n<span class=\"sig-name descname\"><span class=\"pre\">apop</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">__not_given</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.apop\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">apop()</span></code></p>\n<p>Exempel: <code class=\"docutils literal notranslate\"><span class=\"pre\">fav_color</span> <span class=\"pre\">=</span> <span class=\"pre\">request.session.pop('fav_color',</span> <span class=\"pre\">'blue')</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.keys\">\n<span class=\"sig-name descname\"><span class=\"pre\">keys</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.keys\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.akeys\">\n<span class=\"sig-name descname\"><span class=\"pre\">akeys</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.akeys\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">akeys()</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.values\">\n<span class=\"sig-name descname\"><span class=\"pre\">values</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.values\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.avalues\">\n<span class=\"sig-name descname\"><span class=\"pre\">avalues</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.avalues\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">avalues()</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.has_key\">\n<span class=\"sig-name descname\"><span class=\"pre\">has_key</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.has_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.ahas_key\">\n<span class=\"sig-name descname\"><span class=\"pre\">ahas_key</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">key</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.ahas_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">ahas_key()</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.items\">\n<span class=\"sig-name descname\"><span class=\"pre\">items</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.items\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aitems\">\n<span class=\"sig-name descname\"><span class=\"pre\">aitems</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aitems\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aitems()</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.setdefault\">\n<span class=\"sig-name descname\"><span class=\"pre\">setdefault</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.setdefault\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.asetdefault\">\n<span class=\"sig-name descname\"><span class=\"pre\">asetdefault</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.asetdefault\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">asetdefault()</span></code></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.clear\">\n<span class=\"sig-name descname\"><span class=\"pre\">clear</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.clear\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Den har också dessa metoder:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.flush\">\n<span class=\"sig-name descname\"><span class=\"pre\">flush</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.flush\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aflush\">\n<span class=\"sig-name descname\"><span class=\"pre\">aflush</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aflush\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aflush()</span></code></p>\n<p>Deletes the current session data from the session and deletes the session\ncookie. This is used if you want to ensure that the previous session data\ncan’t be accessed again from the user’s browser (for example, the\n<a class=\"reference internal\" href=\"/sv/6.0/topics/auth/default/#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.logout()</span></code></a> function calls it).</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.is_empty\">\n<span class=\"sig-name descname\"><span class=\"pre\">is_empty</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.is_empty\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the session does not have a key and is empty.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.set_test_cookie\">\n<span class=\"sig-name descname\"><span class=\"pre\">set_test_cookie</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.set_test_cookie\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aset_test_cookie\">\n<span class=\"sig-name descname\"><span class=\"pre\">aset_test_cookie</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aset_test_cookie\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aset_test_cookie()</span></code></p>\n<p>Ställer in en testcookie för att avgöra om användarens webbläsare stöder cookies. På grund av hur cookies fungerar kommer du inte att kunna testa detta förrän vid användarens nästa sidbegäran. Se <a class=\"reference internal\" href=\"#setting-test-cookies\">Ställa in testcookies</a> nedan för mer information.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.test_cookie_worked\">\n<span class=\"sig-name descname\"><span class=\"pre\">test_cookie_worked</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.test_cookie_worked\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.atest_cookie_worked\">\n<span class=\"sig-name descname\"><span class=\"pre\">atest_cookie_worked</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.atest_cookie_worked\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">senaste_cookie_arbetade()</span></code></p>\n<p>Returnerar antingen <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, beroende på om användarens webbläsare accepterade testcookien. På grund av hur cookies fungerar måste du anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">set_test_cookie()</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">aset_test_cookie()</span></code> på en tidigare, separat sidbegäran. Se <a class=\"reference internal\" href=\"#setting-test-cookies\">Ställa in testcookies</a> nedan för mer information.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.delete_test_cookie\">\n<span class=\"sig-name descname\"><span class=\"pre\">delete_test_cookie</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.delete_test_cookie\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.adelete_test_cookie\">\n<span class=\"sig-name descname\"><span class=\"pre\">adelete_test_cookie</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.adelete_test_cookie\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">adelete_test_cookie()</span></code></p>\n<p>Raderar testkakan. Använd den här för att städa upp efter dig.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.get_session_cookie_age\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_session_cookie_age</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.get_session_cookie_age\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar värdet för inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_AGE</span></code></a>. Detta kan åsidosättas i en anpassad sessionsbackend.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.set_expiry\">\n<span class=\"sig-name descname\"><span class=\"pre\">set_expiry</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.set_expiry\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aset_expiry\">\n<span class=\"sig-name descname\"><span class=\"pre\">aset_expiry</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aset_expiry\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aset_expiry()</span></code></p>\n<p>Ställer in utgångstiden för sessionen. Du kan ange ett antal olika värden:</p>\n<ul class=\"simple\">\n<li><p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> är ett heltal kommer sessionen att upphöra efter så många sekunder av inaktivitet. Om du till exempel säger <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session.set_expiry(300)</span></code> kommer sessionen att upphöra om 5 minuter.</p></li>\n<li><p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> är ett <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">timedelta</span></code> objekt, kommer sessionen att upphöra vid det specifika datumet/tiden.</p></li>\n<li><p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">värde</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> kommer användarens sessionscookie att upphöra att gälla när användarens webbläsare stängs.</p></li>\n<li><p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> återgår sessionen till att använda den globala policyn för utgång av session.</p></li>\n</ul>\n<p>Läsning av en session betraktas inte som aktivitet när det gäller utgångsdatum. Sessionens utgångsdatum beräknas från den senaste gången sessionen <em>modifierades</em>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.get_expiry_age\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_expiry_age</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.get_expiry_age\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aget_expiry_age\">\n<span class=\"sig-name descname\"><span class=\"pre\">aget_expiry_age</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aget_expiry_age\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aget_expiry_age()</span></code></p>\n<p>Returnerar antalet sekunder tills den här sessionen löper ut. För sessioner utan anpassat utgångsdatum (eller de som är inställda på att upphöra när webbläsaren stängs) kommer detta att vara lika med <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_AGE</span></code></a>.</p>\n<p>Denna funktion accepterar två valfria nyckelordsargument:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">modification</span></code>: senaste ändring av sessionen, som ett <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a>-objekt. Standardvärdet är aktuell tid.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">expiry</span></code>: utgångsinformation för sessionen, som ett <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a>-objekt, ett <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#int\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">int</span></code></a> (i sekunder) eller <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>. Standardvärdet är det värde som lagrats i sessionen av <a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.set_expiry\" title=\"django.contrib.sessions.backends.base.SessionBase.set_expiry\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set_expiry()</span></code></a>/<a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.aset_expiry\" title=\"django.contrib.sessions.backends.base.SessionBase.aset_expiry\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">aset_expiry()</span></code></a>, om det finns ett sådant, eller <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p></li>\n</ul>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Denna metod används av sessionsbackends för att bestämma sessionens utgångsålder i sekunder när sessionen sparas. Den är egentligen inte avsedd för användning utanför detta sammanhang.</p>\n<p>I synnerhet, medan det är <strong>möjligt</strong> att bestämma den återstående livslängden för en session <strong>just när</strong> du har rätt <code class=\"docutils literal notranslate\"><span class=\"pre\">modifiering</span></code>-värde <strong>och</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">expiry</span></code> är inställt som ett <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code>-objekt, där du har <code class=\"docutils literal notranslate\"><span class=\"pre\">modifiering</span></code>-värdet, är det mer enkelt att beräkna expiry för hand:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">expires_at</span> <span class=\"o\">=</span> <span class=\"n\">modification</span> <span class=\"o\">+</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">seconds</span><span class=\"o\">=</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">SESSION_COOKIE_AGE</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.get_expiry_date\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_expiry_date</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.get_expiry_date\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aget_expiry_date\">\n<span class=\"sig-name descname\"><span class=\"pre\">aget_expiry_date</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aget_expiry_date\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aget_expiry_date()</span></code></p>\n<p>Returnerar det datum då den här sessionen kommer att löpa ut. För sessioner som inte har något anpassat utgångsdatum (eller som är inställda på att upphöra när webbläsaren stängs) kommer detta att motsvara datumet <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_AGE</span></code></a> seconds from now.</p>\n<p>Denna funktion accepterar samma nyckelordsargument som <a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.get_expiry_age\" title=\"django.contrib.sessions.backends.base.SessionBase.get_expiry_age\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_expiry_age()</span></code></a>, och liknande anmärkningar om användning gäller.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.get_expire_at_browser_close\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_expire_at_browser_close</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.get_expire_at_browser_close\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aget_expire_at_browser_close\">\n<span class=\"sig-name descname\"><span class=\"pre\">aget_expire_at_browser_close</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aget_expire_at_browser_close\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aget_expire_at_browser_close()</span></code></p>\n<p>Returnerar antingen <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, beroende på om användarens sessionscookie upphör att gälla när användarens webbläsare stängs.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.clear_expired\">\n<span class=\"sig-name descname\"><span class=\"pre\">clear_expired</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.clear_expired\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.aclear_expired\">\n<span class=\"sig-name descname\"><span class=\"pre\">aclear_expired</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.aclear_expired\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aclear_expired()</span></code></p>\n<p>Tar bort utgångna sessioner från sessionslagret. Denna klassmetod anropas av <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-clearsessions\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">clearsessions</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.cycle_key\">\n<span class=\"sig-name descname\"><span class=\"pre\">cycle_key</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.cycle_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.base.SessionBase.acycle_key\">\n<span class=\"sig-name descname\"><span class=\"pre\">acycle_key</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.base.SessionBase.acycle_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">acycle_key()</span></code></p>\n<p>Creates a new session key while retaining the current session data.\n<a class=\"reference internal\" href=\"/sv/6.0/topics/auth/default/#django.contrib.auth.login\" title=\"django.contrib.auth.login\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.login()</span></code></a> calls this method to mitigate against\nsession fixation.</p>\n</dd></dl>\n\n</dd></dl>\n\n<section id=\"session-serialization\">\n<span id=\"id1\"></span><h3>Serialisering av session<a class=\"heading-anchor\" href=\"#session-serialization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Som standard serialiserar Django sessionsdata med hjälp av JSON. Du kan använda inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_SERIALIZER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_SERIALIZER</span></code></a> för att anpassa sessionens serialiseringsformat. Även med de försiktighetsåtgärder som beskrivs i <a class=\"reference internal\" href=\"#custom-serializers\"><span class=\"std std-ref\">Skriv din egen serializer</span></a> rekommenderar vi starkt att du håller dig till JSON-serialisering <em>särskilt om du använder cookie-backend</em>.</p>\n<p>Här är till exempel ett angreppsscenario om du använder <a class=\"reference external\" href=\"https://docs.python.org/3/library/pickle.html#module-pickle\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">pickle</span></code></a> för att serialisera sessionsdata. Om du använder <a class=\"reference internal\" href=\"#cookie-session-backend\"><span class=\"std std-ref\">signed cookie session backend</span></a> och <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY</span></code></a> (eller någon nyckel i <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SECRET_KEY_FALLBACKS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code></a>) är känd av en angripare (det finns inte en inneboende sårbarhet i Django som skulle få den att läcka), kan angriparen infoga en sträng i deras session som, när den avplockas, kör godtycklig kod på servern. Tekniken för att göra detta är enkel och lätt tillgänglig på internet. Även om cookie-sessionslagringen signerar de cookie-lagrade data för att förhindra manipulering, eskalerar en <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY</span></code></a>-läcka omedelbart till en sårbarhet för fjärrkörning av kod.</p>\n<section id=\"bundled-serializers\">\n<h4>Paketerade serialiserare<a class=\"heading-anchor\" href=\"#bundled-serializers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.serializers.JSONSerializer\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">serializers.</span></span><span class=\"sig-name descname\"><span class=\"pre\">JSONSerializer</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.serializers.JSONSerializer\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En wrapper runt JSON-serialisatorn från <a class=\"reference internal\" href=\"/sv/6.0/topics/signing/#module-django.core.signing\" title=\"django.core.signing: Django's signing framework.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.core.signing</span></code></a>. Kan endast serialisera grundläggande datatyper.</p>\n<p>Eftersom JSON endast stöder strängnycklar bör du dessutom notera att användning av nycklar som inte är strängar i <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session</span></code> inte kommer att fungera som förväntat:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># initial assignment</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;bar&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># subsequent requests following serialization &amp; deserialization</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># of session data</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>  <span class=\"c1\"># KeyError</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;0&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;bar&#39;</span>\n</code></pre></div>\n<p>På samma sätt kan data som inte kan kodas i JSON, t.ex. icke-UTF8-bytes som <code class=\"docutils literal notranslate\"><span class=\"pre\">'\\xd9'</span></code> (som ger upphov till <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#UnicodeDecodeError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">UnicodeDecodeError</span></code></a>), inte lagras.</p>\n<p>Se avsnittet <a class=\"reference internal\" href=\"#custom-serializers\"><span class=\"std std-ref\">Skriv din egen serializer</span></a> för mer information om begränsningar för JSON-serialisering.</p>\n</dd></dl>\n\n</section>\n<section id=\"write-your-own-serializer\">\n<span id=\"custom-serializers\"></span><h4>Skriv din egen serializer<a class=\"heading-anchor\" href=\"#write-your-own-serializer\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Observera att <a class=\"reference internal\" href=\"#django.contrib.sessions.serializers.JSONSerializer\" title=\"django.contrib.sessions.serializers.JSONSerializer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONSerializer</span></code></a> inte kan hantera godtyckliga Python-datatyper. Som ofta är fallet finns det en avvägning mellan bekvämlighet och säkerhet. Om du vill lagra mer avancerade datatyper, inklusive <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">Decimal</span></code> i JSON-backade sessioner, måste du skriva en anpassad serializer (eller konvertera sådana värden till ett JSON-serialiserbart objekt innan du lagrar dem i <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session</span></code>). Medan serialisering av dessa värden ofta är okomplicerad (<a class=\"reference internal\" href=\"/sv/6.0/topics/serialization/#django.core.serializers.json.DjangoJSONEncoder\" title=\"django.core.serializers.json.DjangoJSONEncoder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoJSONEncoder</span></code></a> kan vara till hjälp), är det mer bräckligt att skriva en avkodare som på ett tillförlitligt sätt kan få tillbaka samma sak som du lägger in. Till exempel riskerar du att returnera en <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code> som faktiskt var en sträng som bara råkade vara i samma format som valts för <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code>).</p>\n<p>Din serializerklass måste implementera två metoder, <code class=\"docutils literal notranslate\"><span class=\"pre\">dumps(self,</span> <span class=\"pre\">obj)</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">loads(self,</span> <span class=\"pre\">data)</span></code>, för att serialisera respektive deserialisera ordlistan med sessionsdata.</p>\n</section>\n</section>\n<section id=\"session-object-guidelines\">\n<h3>Riktlinjer för sessionsobjekt<a class=\"heading-anchor\" href=\"#session-object-guidelines\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<ul class=\"simple\">\n<li><p>Använd normala Python-strängar som ordboksnycklar i <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session</span></code>. Detta är mer av en konvention än en hård och fast regel.</p></li>\n<li><p>Nycklar i sessionsordlistan som börjar med ett understreck är reserverade för internt bruk av Django.</p></li>\n<li><p>Åsidosätt inte <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session</span></code> med ett nytt objekt, och kom inte åt eller ställ in dess attribut. Använd det som en Python-ordbok.</p></li>\n</ul>\n</section>\n<section id=\"examples\">\n<h3>Exempel<a class=\"heading-anchor\" href=\"#examples\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Denna förenklade vy sätter variabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">has_commented</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> efter att en användare har skrivit en kommentar. Den låter inte en användare posta en kommentar mer än en gång:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">post_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">new_comment</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;has_commented&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;You&#39;ve already commented.&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">Comment</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">=</span><span class=\"n\">new_comment</span><span class=\"p\">)</span>\n    <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;has_commented&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;Thanks for your comment!&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Denna förenklade vy loggar in en ”medlem” på webbplatsen:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">login</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">m</span> <span class=\"o\">=</span> <span class=\"n\">Member</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">[</span><span class=\"s2\">&quot;username&quot;</span><span class=\"p\">])</span>\n    <span class=\"k\">if</span> <span class=\"n\">m</span><span class=\"o\">.</span><span class=\"n\">check_password</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">[</span><span class=\"s2\">&quot;password&quot;</span><span class=\"p\">]):</span>\n        <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;member_id&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">m</span><span class=\"o\">.</span><span class=\"n\">id</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;You&#39;re logged in.&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;Your username and password didn&#39;t match.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>…Och den här loggar ut en medlem, enligt <code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> ovan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">logout</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"k\">del</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;member_id&quot;</span><span class=\"p\">]</span>\n    <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n        <span class=\"k\">pass</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;You&#39;re logged out.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Standardfunktionen <a class=\"reference internal\" href=\"/sv/6.0/topics/auth/default/#django.contrib.auth.logout\" title=\"django.contrib.auth.logout\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.logout()</span></code></a> gör faktiskt lite mer än så för att förhindra oavsiktligt dataläckage. Den anropar <a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.flush\" title=\"django.contrib.sessions.backends.base.SessionBase.flush\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">flush()</span></code></a>-metoden i <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session</span></code>. Vi använder det här exemplet som en demonstration av hur man arbetar med sessionsobjekt, inte som en fullständig implementering av <code class=\"docutils literal notranslate\"><span class=\"pre\">logout()</span></code>.</p>\n</section>\n</section>\n<section id=\"setting-test-cookies\">\n<h2>Inställning av testcookies<a class=\"heading-anchor\" href=\"#setting-test-cookies\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Som en bekvämlighet tillhandahåller Django ett sätt att testa om användarens webbläsare accepterar cookies. Anropa metoden <a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.set_test_cookie\" title=\"django.contrib.sessions.backends.base.SessionBase.set_test_cookie\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set_test_cookie()</span></code></a> i <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session</span></code> i en vy, och anropa <a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.test_cookie_worked\" title=\"django.contrib.sessions.backends.base.SessionBase.test_cookie_worked\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">test_cookie_worked()</span></code></a> i en efterföljande vy - inte i samma vyanrop.</p>\n<p>Denna besvärliga uppdelning mellan <code class=\"docutils literal notranslate\"><span class=\"pre\">set_test_cookie()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">test_cookie_worked()</span></code> är nödvändig på grund av hur cookies fungerar. När du ställer in en cookie kan du faktiskt inte säga om en webbläsare accepterade den förrän webbläsarens nästa begäran.</p>\n<p>It’s good practice to use\n<a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.delete_test_cookie\" title=\"django.contrib.sessions.backends.base.SessionBase.delete_test_cookie\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete_test_cookie()</span></code></a> to clean up after\nyourself. Do this after you’ve verified that the test cookie worked.</p>\n<p>Här är ett typiskt exempel på användning:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">login</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">test_cookie_worked</span><span class=\"p\">():</span>\n            <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">delete_test_cookie</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;You&#39;re logged in.&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;Please enable cookies and try again.&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">set_test_cookie</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;foo/login_form.html&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"using-sessions-out-of-views\">\n<h2>Använda sessioner i stället för vyer<a class=\"heading-anchor\" href=\"#using-sessions-out-of-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Exemplen i detta avsnitt importerar objektet <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code> direkt från backend <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.sessions.backends.db</span></code>. I din egen kod bör du överväga att importera <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code> från den sessionsmotor som anges av <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_ENGINE</span></code></a>, enligt nedan:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">importlib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">import_module</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">SessionStore</span> <span class=\"o\">=</span> <span class=\"n\">import_module</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">SESSION_ENGINE</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">SessionStore</span>\n</code></pre></div>\n</aside>\n<p>Ett API finns tillgängligt för att manipulera sessionsdata utanför en vy:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.sessions.backends.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SessionStore</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">SessionStore</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># stored as seconds since epoch since datetimes are not serializable in JSON.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span><span class=\"p\">[</span><span class=\"s2\">&quot;last_login&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">1376587691</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span><span class=\"o\">.</span><span class=\"n\">session_key</span>\n<span class=\"go\">&#39;2b1189a188b44ad18c35e113ac6ceead&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">SessionStore</span><span class=\"p\">(</span><span class=\"n\">session_key</span><span class=\"o\">=</span><span class=\"s2\">&quot;2b1189a188b44ad18c35e113ac6ceead&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span><span class=\"p\">[</span><span class=\"s2\">&quot;last_login&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">1376587691</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore.create()</span></code> är avsedd att skapa en ny session (dvs. en som inte laddats från sessionslagret och med <code class=\"docutils literal notranslate\"><span class=\"pre\">session_key=None</span></code>). <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> är avsedd att spara en befintlig session (dvs. en session som laddats från sessionslagret). Att anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> på en ny session kan också fungera men har en liten chans att generera en <code class=\"docutils literal notranslate\"><span class=\"pre\">session_key</span></code> som kolliderar med en befintlig. <code class=\"docutils literal notranslate\"><span class=\"pre\">create()</span></code> anropar <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> och loopar tills en oanvänd <code class=\"docutils literal notranslate\"><span class=\"pre\">session_key</span></code> genereras.</p>\n<p>Om du använder backend <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.sessions.backends.db</span></code> är varje session en vanlig Django-modell. Modellen <code class=\"docutils literal notranslate\"><span class=\"pre\">Session</span></code> definieras i <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.0.x/django/contrib/sessions/models.py\">django/contrib/sessions/models.py</a>. Eftersom det är en normal modell kan du komma åt sessioner med hjälp av det normala Django-databas-API: et:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.sessions.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Session</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">Session</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"s2\">&quot;2b1189a188b44ad18c35e113ac6ceead&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span><span class=\"o\">.</span><span class=\"n\">expire_date</span>\n<span class=\"go\">datetime.datetime(2005, 8, 20, 13, 35, 12)</span>\n</code></pre></div>\n<p>Note that you’ll need to call\n<a class=\"reference internal\" href=\"#django.contrib.sessions.base_session.AbstractBaseSession.get_decoded\" title=\"django.contrib.sessions.base_session.AbstractBaseSession.get_decoded\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_decoded()</span></code></a> to get the session\ndictionary. This is necessary because the dictionary is stored in an encoded\nformat:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span><span class=\"o\">.</span><span class=\"n\">session_data</span>\n<span class=\"go\">&#39;KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">s</span><span class=\"o\">.</span><span class=\"n\">get_decoded</span><span class=\"p\">()</span>\n<span class=\"go\">{&#39;user_id&#39;: 42}</span>\n</code></pre></div>\n</section>\n<section id=\"when-sessions-are-saved\">\n<h2>När sessioner sparas<a class=\"heading-anchor\" href=\"#when-sessions-are-saved\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Som standard sparar Django bara i sessionsdatabasen när sessionen har ändrats, det vill säga om något av dess ordboksvärden har tilldelats eller tagits bort:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Session is modified.</span>\n<span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;bar&quot;</span>\n\n<span class=\"c1\"># Session is modified.</span>\n<span class=\"k\">del</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span>\n\n<span class=\"c1\"># Session is modified.</span>\n<span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n<span class=\"c1\"># Gotcha: Session is NOT modified, because this alters</span>\n<span class=\"c1\"># request.session[&#39;foo&#39;] instead of request.session.</span>\n<span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;baz&quot;</span>\n</code></pre></div>\n<p>I det sista fallet i exemplet ovan kan vi uttryckligen tala om för sessionsobjektet att det har modifierats genom att ställa in attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">modified</span></code> på sessionsobjektet:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">modified</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n</code></pre></div>\n<p>För att ändra detta standardbeteende, sätt inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_SAVE_EVERY_REQUEST\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_SAVE_EVERY_REQUEST</span></code></a> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. När den är inställd på <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> kommer Django att spara sessionen i databasen vid varje enskild begäran.</p>\n<p>Observera att sessionskakan endast skickas när en session har skapats eller ändrats. Om <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_SAVE_EVERY_REQUEST\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_SAVE_EVERY_REQUEST</span></code></a> är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> skickas sessionskakan vid varje förfrågan.</p>\n<p>På samma sätt uppdateras ”upphör att gälla”-delen av en sessionskaka varje gång sessionskakan skickas.</p>\n<p>Sessionen sparas inte om statuskoden för svaret är 500.</p>\n</section>\n<section id=\"browser-length-sessions-vs-persistent-sessions\">\n<span id=\"browser-length-vs-persistent-sessions\"></span><h2>Sessioner som varar hela webbläsaren jämfört med permanenta sessioner<a class=\"heading-anchor\" href=\"#browser-length-sessions-vs-persistent-sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Du kan styra om sessionsramverket ska använda sessioner med webbläsarlängd eller permanenta sessioner med inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_EXPIRE_AT_BROWSER_CLOSE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_EXPIRE_AT_BROWSER_CLOSE</span></code></a>.</p>\n<p>Som standard är <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_EXPIRE_AT_BROWSER_CLOSE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_EXPIRE_AT_BROWSER_CLOSE</span></code></a> inställd på <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, vilket innebär att sessionscookies lagras i användarnas webbläsare lika länge som <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_AGE</span></code></a>. Använd detta om du inte vill att användarna ska behöva logga in varje gång de öppnar en webbläsare.</p>\n<p>Om <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_EXPIRE_AT_BROWSER_CLOSE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_EXPIRE_AT_BROWSER_CLOSE</span></code></a> är inställd på <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, kommer Django att använda cookies med webbläsarlängd - cookies som upphör att gälla så snart användaren stänger sin webbläsare. Använd detta om du vill att folk ska behöva logga in varje gång de öppnar en webbläsare.</p>\n<p>Denna inställning är en global standardinställning och kan skrivas över per session genom att uttryckligen anropa <a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.set_expiry\" title=\"django.contrib.sessions.backends.base.SessionBase.set_expiry\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set_expiry()</span></code></a>-metoden för <code class=\"docutils literal notranslate\"><span class=\"pre\">request.session</span></code> enligt beskrivningen ovan i <a class=\"reference internal\" href=\"#using-sessions-in-views\">använda sessioner i vyer</a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Vissa webbläsare (t.ex. Chrome) har inställningar som gör det möjligt för användare att fortsätta surfa efter att webbläsaren har stängts och öppnats igen. I vissa fall kan detta störa inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_EXPIRE_AT_BROWSER_CLOSE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_EXPIRE_AT_BROWSER_CLOSE</span></code></a> och förhindra att sessioner löper ut när webbläsaren stängs. Var medveten om detta när du testar Django-applikationer som har inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_EXPIRE_AT_BROWSER_CLOSE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_EXPIRE_AT_BROWSER_CLOSE</span></code></a> aktiverad.</p>\n</aside>\n</section>\n<section id=\"clearing-the-session-store\">\n<span id=\"id2\"></span><h2>Rensning av sessionslagret<a class=\"heading-anchor\" href=\"#clearing-the-session-store\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När användare skapar nya sessioner på din webbplats kan sessionsdata ackumuleras i din sessionsbutik. Om du använder databas-backend kommer databastabellen <code class=\"docutils literal notranslate\"><span class=\"pre\">django_session</span></code> att växa. Om du använder filbackend kommer din temporära katalog att innehålla ett ökande antal filer.</p>\n<p>För att förstå detta problem, överväg vad som händer med databasens backend. När en användare loggar in lägger Django till en rad i databastabellen <code class=\"docutils literal notranslate\"><span class=\"pre\">django_session</span></code>. Django uppdaterar den här raden varje gång sessionsdata ändras. Om användaren loggar ut manuellt raderar Django raden. Men om användaren <em>inte</em> loggar ut raderas raden aldrig. En liknande process sker med filbackend.</p>\n<p>Django tillhandahåller <em>inte</em> automatisk rensning av utgångna sessioner. Därför är det ditt jobb att rensa bort utgångna sessioner regelbundet. Django tillhandahåller ett kommando för upprensning för detta ändamål: <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-clearsessions\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">clearsessions</span></code></a>. Det rekommenderas att anropa detta kommando regelbundet, till exempel som ett dagligt cron-jobb.</p>\n<p>Observera att cache-backend inte är sårbart för detta problem, eftersom cacher automatiskt raderar inaktuella data. Det är inte heller cookie-backend, eftersom sessionsdata lagras av användarnas webbläsare.</p>\n</section>\n<section id=\"settings\">\n<h2>Inställningar<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Några <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#settings-sessions\"><span class=\"std std-ref\">Django-inställningar</span></a> ger dig kontroll över sessionens beteende:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_CACHE_ALIAS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_CACHE_ALIAS</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_AGE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_DOMAIN\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_DOMAIN</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_HTTPONLY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_HTTPONLY</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_NAME</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_PATH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_PATH</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_SAMESITE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_SAMESITE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_SECURE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_ENGINE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_EXPIRE_AT_BROWSER_CLOSE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_EXPIRE_AT_BROWSER_CLOSE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_FILE_PATH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_FILE_PATH</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_SAVE_EVERY_REQUEST\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_SAVE_EVERY_REQUEST</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_SERIALIZER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_SERIALIZER</span></code></a></p></li>\n</ul>\n</section>\n<section id=\"session-security\">\n<span id=\"topics-session-security\"></span><h2>Säkerhet för sessioner<a class=\"heading-anchor\" href=\"#session-security\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Underdomäner inom en webbplats kan ställa in cookies på klienten för hela domänen. Detta gör sessionsfixering möjlig om cookies tillåts från underdomäner som inte kontrolleras av betrodda användare.</p>\n<p>En angripare kan t.ex. logga in på <code class=\"docutils literal notranslate\"><span class=\"pre\">good.example.com</span></code> och få en giltig session för sitt konto. Om angriparen har kontroll över <code class=\"docutils literal notranslate\"><span class=\"pre\">bad.example.com</span></code> kan han eller hon använda den för att skicka sin sessionsnyckel till dig eftersom en underdomän tillåts sätta cookies på <code class=\"docutils literal notranslate\"><span class=\"pre\">*.example.com</span></code>. När du besöker <code class=\"docutils literal notranslate\"><span class=\"pre\">good.example.com</span></code> kommer du att vara inloggad som angriparen och kan oavsiktligt ange dina känsliga personuppgifter (t.ex. kreditkortsinformation) på angriparens konto.</p>\n<p>En annan möjlig attack skulle vara om <code class=\"docutils literal notranslate\"><span class=\"pre\">good.example.com</span></code> sätter sin <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_COOKIE_DOMAIN\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_DOMAIN</span></code></a> till <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;example.com&quot;</span></code> vilket skulle leda till att sessionscookies från den webbplatsen skickas till <code class=\"docutils literal notranslate\"><span class=\"pre\">bad.example.com</span></code>.</p>\n</section>\n<section id=\"technical-details\">\n<h2>Tekniska detaljer<a class=\"heading-anchor\" href=\"#technical-details\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul class=\"simple\">\n<li><p>Sessionsordlistan accepterar alla <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#module-json\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">json</span></code></a> serialiserbara värden när du använder <a class=\"reference internal\" href=\"#django.contrib.sessions.serializers.JSONSerializer\" title=\"django.contrib.sessions.serializers.JSONSerializer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONSerializer</span></code></a>.</p></li>\n<li><p>Sessionsdata lagras i en databastabell med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">django_session</span></code>.</p></li>\n<li><p>Django skickar bara en cookie om det behövs. Om du inte anger några sessionsdata skickas ingen sessionskaka.</p></li>\n</ul>\n<section id=\"the-sessionstore-object\">\n<h3>Objektet <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code><a class=\"heading-anchor\" href=\"#the-sessionstore-object\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När Django arbetar med sessioner internt använder Django ett sessionslagringsobjekt från motsvarande sessionsmotor. Enligt konvention heter klassen för sessionslagringsobjektet <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code> och finns i den modul som anges av <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-SESSION_ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_ENGINE</span></code></a>.</p>\n<p>Alla underklasser till <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code> som finns tillgängliga i Django implementerar följande metoder för datahantering:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">exists()</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">create()</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">load()</span></code></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.clear_expired\" title=\"django.contrib.sessions.backends.base.SessionBase.clear_expired\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">clear_expired()</span></code></a></p></li>\n</ul>\n<p>Ett asynkront gränssnitt för dessa metoder tillhandahålls genom att de paketeras med <code class=\"docutils literal notranslate\"><span class=\"pre\">sync_to_async()</span></code>. De kan implementeras direkt om en asynkron implementation finns tillgänglig:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">aexists()</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">avsluta()</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">asave()</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">adelete()</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">aload()</span></code></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase.aclear_expired\" title=\"django.contrib.sessions.backends.base.SessionBase.aclear_expired\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">aclear_expired()</span></code></a></p></li>\n</ul>\n<p>För att bygga en anpassad sessionsmotor eller för att anpassa en befintlig kan du skapa en ny klass som ärver från <a class=\"reference internal\" href=\"#django.contrib.sessions.backends.base.SessionBase\" title=\"django.contrib.sessions.backends.base.SessionBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SessionBase</span></code></a> eller någon annan befintlig <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code>-klass.</p>\n<p>Du kan utöka sessionsmotorerna, men att göra det med databasstödda sessionsmotorer kräver i allmänhet lite extra arbete (se nästa avsnitt för mer information).</p>\n</section>\n</section>\n<section id=\"extending-database-backed-session-engines\">\n<span id=\"id3\"></span><h2>Utökning av databasstödda sessionsmotorer<a class=\"heading-anchor\" href=\"#extending-database-backed-session-engines\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Att skapa en anpassad databasstödd sessionsmotor som bygger på de som ingår i Django (nämligen <code class=\"docutils literal notranslate\"><span class=\"pre\">db</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">cached_db</span></code>) kan göras genom att ärva <a class=\"reference internal\" href=\"#django.contrib.sessions.base_session.AbstractBaseSession\" title=\"django.contrib.sessions.base_session.AbstractBaseSession\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AbstractBaseSession</span></code></a> och antingen <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code>-klassen.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">AbstractBaseSession</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseSessionManager</span></code> är importerbara från <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.sessions.base_session</span></code> så att de kan importeras utan att inkludera <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.sessions</span></code> i <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.base_session.AbstractBaseSession\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">base_session.</span></span><span class=\"sig-name descname\"><span class=\"pre\">AbstractBaseSession</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.base_session.AbstractBaseSession\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Den abstrakta basmodellen för sessionen.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.base_session.AbstractBaseSession.session_key\">\n<span class=\"sig-name descname\"><span class=\"pre\">session_key</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.base_session.AbstractBaseSession.session_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Primär nyckel. Själva fältet kan innehålla upp till 40 tecken. Den nuvarande implementeringen genererar en sträng med 32 tecken (en slumpmässig sekvens av siffror och gemena ASCII-bokstäver).</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.base_session.AbstractBaseSession.session_data\">\n<span class=\"sig-name descname\"><span class=\"pre\">session_data</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.base_session.AbstractBaseSession.session_data\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En sträng som innehåller en kodad och serialiserad sessionsordbok.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.base_session.AbstractBaseSession.expire_date\">\n<span class=\"sig-name descname\"><span class=\"pre\">expire_date</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.base_session.AbstractBaseSession.expire_date\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En datatid som anger när sessionen upphör att gälla.</p>\n<p>Utgångna sessioner är inte tillgängliga för en användare, men de kan fortfarande lagras i databasen tills kommandot <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-clearsessions\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">clearsessions</span></code></a> körs.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.base_session.AbstractBaseSession.get_session_store_class\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">get_session_store_class</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.base_session.AbstractBaseSession.get_session_store_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar en session store-klass som ska användas med denna sessionsmodell.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.base_session.AbstractBaseSession.get_decoded\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_decoded</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.base_session.AbstractBaseSession.get_decoded\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar avkodade sessionsdata.</p>\n<p>Avkodningen utförs av klassen session store.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Du kan också anpassa modellhanteraren genom att underklassa <a class=\"reference internal\" href=\"#django.contrib.sessions.base_session.BaseSessionManager\" title=\"django.contrib.sessions.base_session.BaseSessionManager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BaseSessionManager</span></code></a>:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.base_session.BaseSessionManager\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">base_session.</span></span><span class=\"sig-name descname\"><span class=\"pre\">BaseSessionManager</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.base_session.BaseSessionManager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.base_session.BaseSessionManager.encode\">\n<span class=\"sig-name descname\"><span class=\"pre\">encode</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">session_dict</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.base_session.BaseSessionManager.encode\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar den angivna sessionsordboken serialiserad och kodad som en sträng.</p>\n<p>Kodningen utförs av klassen Session Store som är kopplad till en modellklass.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.base_session.BaseSessionManager.save\">\n<span class=\"sig-name descname\"><span class=\"pre\">save</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">session_key</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">session_dict</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expire_date</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.base_session.BaseSessionManager.save\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Sparar sessionsdata för en angiven sessionsnyckel, eller raderar sessionen om data är tomma.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Anpassning av klasserna <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code> uppnås genom att åsidosätta metoder och egenskaper som beskrivs nedan:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.db.SessionStore\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">backends.db.</span></span><span class=\"sig-name descname\"><span class=\"pre\">SessionStore</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.db.SessionStore\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Implementerar databasstödd sessionslagring.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.db.SessionStore.get_model_class\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">get_model_class</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.db.SessionStore.get_model_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Skriv över den här metoden för att returnera en anpassad sessionsmodell om du behöver en.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.db.SessionStore.create_model_instance\">\n<span class=\"sig-name descname\"><span class=\"pre\">create_model_instance</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.db.SessionStore.create_model_instance\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar en ny instans av sessionsmodellobjektet, som representerar det aktuella sessionstillståndet.</p>\n<p>Genom att åsidosätta den här metoden kan du ändra data i sessionsmodellen innan de sparas i databasen.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.cached_db.SessionStore\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">backends.cached_db.</span></span><span class=\"sig-name descname\"><span class=\"pre\">SessionStore</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.cached_db.SessionStore\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Implementerar cachelagrad databasstödd sessionslagring.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.backends.cached_db.SessionStore.cache_key_prefix\">\n<span class=\"sig-name descname\"><span class=\"pre\">cache_key_prefix</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.backends.cached_db.SessionStore.cache_key_prefix\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett prefix som läggs till en sessionsnyckel för att bygga upp en cache-nyckelsträng.</p>\n</dd></dl>\n\n</dd></dl>\n\n<section id=\"example\">\n<h3>Exempel<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>I exemplet nedan visas en anpassad databasstödd sessionsmotor som innehåller en extra databaskolumn för att lagra ett konto-ID (vilket ger möjlighet att söka i databasen efter alla aktiva sessioner för ett konto):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.sessions.backends.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SessionStore</span> <span class=\"k\">as</span> <span class=\"n\">DBStore</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.sessions.base_session</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AbstractBaseSession</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomSession</span><span class=\"p\">(</span><span class=\"n\">AbstractBaseSession</span><span class=\"p\">):</span>\n    <span class=\"n\">account_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_session_store_class</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">SessionStore</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SessionStore</span><span class=\"p\">(</span><span class=\"n\">DBStore</span><span class=\"p\">):</span>\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_model_class</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">CustomSession</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">create_model_instance</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">):</span>\n        <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">create_model_instance</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">account_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;_auth_user_id&quot;</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"p\">(</span><span class=\"ne\">ValueError</span><span class=\"p\">,</span> <span class=\"ne\">TypeError</span><span class=\"p\">):</span>\n            <span class=\"n\">account_id</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">account_id</span> <span class=\"o\">=</span> <span class=\"n\">account_id</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span>\n</code></pre></div>\n<p>Om du migrerar från Djangos inbyggda <code class=\"docutils literal notranslate\"><span class=\"pre\">cached_db</span></code> sessionslagring till en anpassad lagring baserad på <code class=\"docutils literal notranslate\"><span class=\"pre\">cached_db</span></code>, bör du åsidosätta prefixet för cache-nyckeln för att förhindra en namnrymdskrock:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SessionStore</span><span class=\"p\">(</span><span class=\"n\">CachedDBStore</span><span class=\"p\">):</span>\n    <span class=\"n\">cache_key_prefix</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;mysessions.custom_cached_db_backend&quot;</span>\n\n    <span class=\"c1\"># ...</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"session-ids-in-urls\">\n<h2>Sessions-ID:n i webbadresser<a class=\"heading-anchor\" href=\"#session-ids-in-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Djangos sessionsramverk är helt och hållet, och enbart, cookie-baserat. Det faller inte tillbaka till att sätta sessions-ID i webbadresser som en sista utväg, som PHP gör. Detta är ett avsiktligt designbeslut. Det beteendet gör inte bara webbadresser fula, det gör din webbplats sårbar för stöld av sessions-ID via ”Referer”-rubriken.</p>\n</section>","rootId":"module-django.contrib.sessions","toc":[{"title":"Möjliggörande av sessioner","anchor":"enabling-sessions","children":[]},{"title":"Konfigurera sessionsmotorn","anchor":"configuring-the-session-engine","children":[{"title":"Använda databasstödda sessioner","anchor":"using-database-backed-sessions","children":[]},{"title":"Använda cachade sessioner","anchor":"using-cached-sessions","children":[]},{"title":"Använda filbaserade sessioner","anchor":"using-file-based-sessions","children":[]},{"title":"Använda cookie-baserade sessioner","anchor":"using-cookie-based-sessions","children":[]}]},{"title":"Använda sessioner i vyer","anchor":"using-sessions-in-views","children":[{"title":"Serialisering av session","anchor":"session-serialization","children":[{"title":"Paketerade serialiserare","anchor":"bundled-serializers","children":[]},{"title":"Skriv din egen serializer","anchor":"write-your-own-serializer","children":[]}]},{"title":"Riktlinjer för sessionsobjekt","anchor":"session-object-guidelines","children":[]},{"title":"Exempel","anchor":"examples","children":[]}]},{"title":"Inställning av testcookies","anchor":"setting-test-cookies","children":[]},{"title":"Använda sessioner i stället för vyer","anchor":"using-sessions-out-of-views","children":[]},{"title":"När sessioner sparas","anchor":"when-sessions-are-saved","children":[]},{"title":"Sessioner som varar hela webbläsaren jämfört med permanenta sessioner","anchor":"browser-length-sessions-vs-persistent-sessions","children":[]},{"title":"Rensning av sessionslagret","anchor":"clearing-the-session-store","children":[]},{"title":"Inställningar","anchor":"settings","children":[]},{"title":"Säkerhet för sessioner","anchor":"session-security","children":[]},{"title":"Tekniska detaljer","anchor":"technical-details","children":[{"title":"Objektet SessionStore","anchor":"the-sessionstore-object","children":[]}]},{"title":"Utökning av databasstödda sessionsmotorer","anchor":"extending-database-backed-session-engines","children":[{"title":"Exempel","anchor":"example","children":[]}]},{"title":"Sessions-ID:n i webbadresser","anchor":"session-ids-in-urls","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.0/topics/"},{"docname":"topics/http/index","title":"Hantering av HTTP-förfrågningar","url":"/sv/6.0/topics/http/"}],"prev":{"docname":"topics/http/middleware","title":"Middleware","url":"/sv/6.0/topics/http/middleware/"},"next":{"docname":"topics/forms/index","title":"Arbeta med formulär","url":"/sv/6.0/topics/forms/"},"formats":{"html":"/sv/6.0/topics/http/sessions/","markdown":"/sv/6.0/topics/http/sessions.md","json":"/sv/6.0/topics/http/sessions.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/topics/http/sessions.txt","official":"https://docs.djangoproject.com/sv/6.0/topics/http/sessions/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}