English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
如前所述,我们可以在Web应用程序客户端使用Cookie来存储大量有用的数据。在此之前,我们已经看到可以使用客户端的cookie存储各种数据,在Web应用程序中这非常有用。这就导致了许多保存数据的重要性和一些安全漏洞问题。
出于安全原因,Django有一个会话框架来处理Cookies。会话用于抽象地接收和发送cookie,数据保存在服务器端(如数据库),而客户端的cookie只是包含识别会话ID。会话还有助于避免在用户浏览器设置为“不接受”cookies时的问题。
在Django中,通过在项目settings.py中添加一些行到MIDDLEWARE_CLASSES和INSTALLED_APPS选项来完成会话。这应该在创建项目后完成,但它总是很容易知道,所以MIDDLEWARE_CLASSES应该类似如下 -
e abbinalo all'URL di注销 in myapp/url.py # Nome file: example.py # Copyright: 2020 da w3codebox # Autore: it.oldtoolbag.com 'django.contrib.sessions.middleware.SessionMiddleware'
INSTALLED_APPS应该有 -
e abbinalo all'URL di注销 in myapp/url.py # Nome file: example.py # Copyright: 2020 da w3codebox # Autore: it.oldtoolbag.com 'django.contrib.sessions'
默认情况下,Django在数据库中保存会话信息(表django_session中或集合),但可以用其他方式存储信息,类似于配置的引擎:在文件中或在缓存中。
当会话启用时,每个请求(在Django任何针对第一个参数)都有一个会话(字典)属性。
让我们创建一个简单的示例,看看如何创建和保存会话。我们之前已经建立了一个简单的登录系统(见Django表单处理的章节和DjangoCookies处理一章)。让我们在cookie中保存用户名。因此,如果您没有注销,访问我们的登录页面时,您将看不到登录表单。在Django中,通过在服务器端保存Cookie,使用cookies处理更加安全。
关于这一点,首先让我们修改登录代码以在服务器端保存username -
e abbinalo all'URL di注销 in myapp/url.py # Nome file: example.py # Copyright: 2020 da w3codebox # Autore: it.oldtoolbag.com def login(request): username = 'not logged in' if request.method == 'POST': MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] request.session['username'] = username else: MyLoginForm = LoginForm() return render(request, 'loggedin.html', {'username' : username}
Quindi creiamo la vista corrispondente al modulo di login, se il cookie è impostato non verrà visualizzato il modulo -
e abbinalo all'URL di注销 in myapp/url.py # Nome file: example.py # Copyright: 2020 da w3codebox # Autore: it.oldtoolbag.com def formView(request): if request.session.has_key('username'): username = request.session['username'] return render(request, 'loggedin.html', {'username' : username}) else: return render(request, 'login.html', {})
Ora, modifichiamo il file url.py e cambiamo l'URL, quindi abbiniamo la nuova vista -
e abbinalo all'URL di注销 in myapp/url.py # Nome file: example.py # Copyright: 2020 da w3codebox # Autore: it.oldtoolbag.com from django.conf.urls import patterns, url from django.views.generic import TemplateView urlpatterns = patterns('myapp.views', url(r'^connection/','formView', name = 'loginform'), url(r'^login/', 'login', name = 'login'))
Quando accedi a /myapp/connection, vedrai la seguente pagina -
Verrai reindirizzato alla seguente pagina -
Ora, se provi di accedere di nuovo a /myapp/connection, verrai reindirizzato direttamente alla seconda schermata.
Creiamo una vista di注销 semplice per cancellare i Cookie.
e abbinalo all'URL di注销 in myapp/url.py # Nome file: example.py # Copyright: 2020 da w3codebox # Autore: it.oldtoolbag.com def logout(request): try: del request.session['username'] except: except: pass
return HttpResponse("<strong>Sei disconnesso.</strong>")
e abbinalo all'URL di注销 in myapp/url.py # Nome file: example.py # Copyright: 2020 da w3codebox # Autore: it.oldtoolbag.com # Data: 2020-08-08
url(r'^logout/', 'logout', name='logout'),
Ora, se visiti /myapp/logout, otterrai la seguente pagina-
Azioni che possono essere utilizzate con la sessione
Abbiamo visto come memorizzare e accedere alle sessioni, di seguito è riportato un esempio di come ottenere le proprietà di sessione della richiesta e altre operazioni utili: set_expiry(value)
− Imposta il tempo di scadenza della sessione get_expiry_age()
− Restituisce il numero di secondi fino alla scadenza della sessione get_expiry_date()
− Restituisce la data di scadenza della sessione corrente clear_expired()
− Elimina i dati di archiviazione di sessione scaduti get_expire_at_browser_close()