setting.py
在 INSTALLED_APPS 中加入 online。
在 MIDDLEWARE_CLASSES 中注释掉 'django.middleware.csrf.CsrfViewMiddleware'。
设置数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_session',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '',
'PORT': '3306',
}
}
模版路径:
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'test_sessin/online/templates'),
)
urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
import online
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^login/$', 'online.views.login'),
url(r'^index/$', 'online.views.index'),
url(r'^logout/$', 'online.views.logout'),
)
同步数据库:
python manager.py migrate
然后会在数据库中看到表:django_session。
online/views.py
#coding=utf-8
from django.shortcuts import render
from django.shortcuts import render,render_to_response
from django.http import HttpResponse,HttpResponseRedirect
from django import forms
class UserForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
#用户登录
def login(req):
if req.method == "POST":
uf = UserForm(req.POST)
if uf.is_valid():
username = uf.cleaned_data['username']
password = uf.cleaned_data['password']
#把获取表单的用户名传递给session对象
req.session['username'] = username
req.session['password'] = password
return HttpResponseRedirect('/index/')
else:
uf = UserForm()
return render_to_response('login.html',{'uf':uf})
#登录之后跳转页
def index(req):
username = req.session.get('username','anybody')
password = req.session.get('password','')
return render_to_response('index.html',{'username':username})
#注销动作
def logout(req):
del req.session['username'] #删除session
del req.session['password']
return HttpResponse('logout ok!')
模版:
login.html
index.html
运行:
python manger.py runserver 0.0.0.0:8001
访问登录:
登录后,在浏览器的cookies中会有 session id:
在后台数据库的django_session表中可以看到session的记录:
解析 session_data 可以看到登录的用户名/密码
>>> import base64
>>> base64.b64decode('NWY4YmYzYjk3YWJiNzY0YzYxM2NlODVhZDJjZTg3MTc0ZTMyMTg2Mzp7InVzZXJuYW1lIjoidXNlciIsInBhc3N3b3JkIjoicHdkIn0=')
'5f8bf3b97abb764c613ce85ad2ce87174e321863:{"username":"user","password":"pwd"}'
session 是用户登录的用户名/密码 保存在服务器端的数据库中,
而客户端(浏览器)产生的只是一个session id ,
程序通过读取客户端的session id 来查找对应的用户名/密码。
点击 logout
再访问 index:
此时是 anybody,没有登录的用户。因为后台在访问 logout 的时候删除了 session_data中的用户信息
解析 session_data 可以发现用户名/密码已删除
>>> base64.b64decode('YmQ0ZjdkNzc0NGI0YWI2MDRmMTQ4OGM4MzhiZmI5YzUyYWYwNWFmNjp7fQ==')
'bd4f7d7744b4ab604f1488c838bfb9c52af05af6:{}'