购物车是需要会话技术 来支持的:
假设 某网站需要有三个用户 同时访问 ,a用户发出请求,要求把商品a 加入到购物车中,那么如何来识别用户呢,避免将a用户的商品加到b用户的购物车中,可以用会话。
会话技术:服务器⽆法识别每⼀次 HTTP 请求的出处(不知道来⾃于哪个终端),它只会接受到⼀个请求信号,所
以就存在⼀个问题:将⽤户的响应发送给其他⼈,必须有⼀种技术来让服务器知道请求来⾃哪,这就是
会话技术。
会话:就是客户端和服务器之间发⽣的⼀系列连续的请求和响应的过程,打开浏览器进⾏操作到关闭浏
览器的过程。
会话状态:指服务器和浏览器在会话过程中产⽣的状态信息,借助于会话状态,服务器能够把属于同⼀
次会话的⼀系列请求和响应关联起来。
实现会话有两种⽅式:
session(属于服务端)
cookie(属于客户端)
Django 默认开启 session:而且数据库中是有session 表的
INSTALLED_APPS = [
# 启用 sessions 应用
'django.contrib.sessions',
]
MIDDLEWARE = [
# 启用 Session 中间层
'django.contrib.sessions.middleware.SessionMiddleware',
]
配置session参数:
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_COOKIE_NAME = "sessionid"
SESSION_COOKIE_PATH = "/"
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_SECURE = False
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_AGE = 43200
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_SAVE_EVERY_REQUEST = False
SESSION_ENGINE = ‘django.contrib.sessions.backends.db’ # 指定session引擎
SESSION_COOKIE_NAME = “sessionid” # session在浏览器中存储的名称
SESSION_COOKIE_PATH = “/” # session应用的站点路径,默认为全站
SESSION_COOKIE_DOMAIN = None # session应用的站点域名
SESSION_COOKIE_SECURE = False # session是否只允许在https下存储
SESSION_COOKIE_HTTPONLY = True # 设置为True时js无法获取到内容,这样能有效的防止XSS攻击
SESSION_COOKIE_AGE = 43200 # session生存时间
SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 浏览器关闭时是否清楚session
SESSION_SAVE_EVERY_REQUEST = False # 当有请求进来时重新保存session
使用session:
def testSessions(request):
# 如果没有session 就为其创建一个
if not request.session.session_key:
request.session.create()
# 向seeeion 中写入数据
request.session['k1'] = 123
request.session['c'] = 1
print(request.session.session_key)
print(request.session.keys())
print(request.session.values())
print(request.session.items())
return JsonResponse({"aaa":'a'})
def showSession(request):
print("------------------------------")
request.session['c'] = 2
print(request.session.session_key)
print(request.session.items())
return JsonResponse({"aaa": 'a'})