ctrl + shift + del 是谷歌浏览器中清除页面缓存和cookie的快捷键javascript
语法:html
# 获得须要返回的的操做 rep = HttpResponse(...) rep = render(request, ...) # 设置cookie rep.set_cookie(key,value,...) # 设置加密cookie rep.set_signed_cookie(key,value,salt='加密盐', max_age=None, ...) # 参数: key, 键 value='', 值 max_age=None, 超时时间 expires=None, 超时时间(IE requires expires, so set it if hasn't been already.) path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie能够被任何url的页面访问 domain=None, Cookie生效的域名 secure=False, https传输 httponly=False 只能http协议传输,没法被JavaScript获取(不是绝对,底层抓包能够获取到也能够被覆盖)
<br/>java
语法:python
# 普通获取 request.COOKIES['key'] # 获取加密cookie request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) # 参数: default: 默认值 salt: 加密盐 max_age: 后台控制过时时间
<br/>数据库
request.COOKIES["KEY"] # 直接获取cookie的方法 request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) # 获取加密cookie的方式 def logout(request): rep = redirect("/login/") rep.delete_cookie("user") # 删除用户浏览器上以前设置的usercookie值 return rep
jQuery中操做cookiedjango
$.cookie('the_cookie', 'the_value'); // 添加一个"会话cookie $.cookie('the_cookie'); //读取cookie $.cookie('the_cookie', null); //删除cookie 经过传递null做为cookie的值便可
<br/>浏览器
数据库内有tom和bob两个用户名,密码均为123缓存
views.pycookie
def login(request): if request.method == "GET": return render(request, "login.html") else: username = request.POST.get("username") password = request.POST.get("password") query_list = models.UserInfo.objects.filter(username=username,password=password) if query_list.exists(): ret = redirect('index') # ret.set_cookie("is_login", True, max_age=10) # max_age=10 10秒以后失效 # ret.set_cookie("username", username, max_age=10) # 10秒以后失效 # 加密cookie的写法 ret.set_signed_cookie("is_login", True, "salt", max_age=10) ret.set_signed_cookie("username", username, "salt", max_age=10) return ret # 登录成功后跳转主页 else: return render(request,"login.html") # 登录失败以后返回登录页 def index(request): print(request.COOKIES) # 打印看一下如今的cookie # is_login = request.COOKIES.get("is_login", False) # username = request.COOKIES.get("username") is_login = request.get_signed_cookie("is_login", False, "salt") username = request.get_signed_cookie("username",salt="salt") print(is_login) # True print(type(is_login)) # <class 'str'> if is_login != 'True': return redirect('login') else: return render(request,"index.html",{"username":username})
login.htmlsession
<form action="{% url 'login' %}" method="post"> {% csrf_token %} <table> <tr>用户名<input type="text" name="username" id="username"></tr> <tr>密码<input type="password" name="password" id="password"></tr> <tr><input type="submit" value="登陆"></tr> </table> </form>
index.html
<h1>欢迎{{ username }}来到主页</h1>
数据库中的表
<br/>
不一样的网站session是不同的,这些操做都只是django提供的方法,其余的框架不适用,须要本身来写关于cookie和session的方法.
request.session['k1'] request.session.get('k1',None)
request.session这句是从cookie里面将sessionid的值取出来,将django-session表里面的对应sessionid的值的那条记录中的session-data字段的数据给取出来(并解密),get方法就取出k1这个键对应的值.可是django-session这个表,不能经过orm来直接控制,由于app中本身定义的models.py里面没有这个对应关系
<br/>
生成随机字符串,自动将这个随机字符串和用户数据(加密后)和过时时间保存到了django-session表里面,以后会自动将这个随机字符串以sessionid:随机字符串的形式添加到cookie里面返回给浏览器,这个sessionid名字是能够改的
request.session['k1'] = 100 request.session.setdefault('k1', 10) # 默认值存在则不设置
<br/>
经常使用:
# 删除当前的会话数据并删除会话的Cookie。 request.session.flush()
上面的方法经常使用,会清空全部cookie---删除session表里的这个会话的记录,这用于确保前面的会话数据不能够再次被用户的浏览器访问例如django.contrib.auth.logout() 函数中就会调用它。
其余删除方法:
# django-session表里内会同步删除 del request.session['k1'] # 删除当前会话的全部Session数据 request.session.delete() # 将全部Session失效日期小于当前日期的数据删除,将过时的删除 request.session.clear_expired()
<br/>
# 全部 键、值、键值对 request.session.keys() request.session.values() request.session.items() # 会话session的key session_key = request.session.session_key 获取sessionid的值 # 将全部Session失效日期小于当前日期的数据删除,将过时的删除 request.session.clear_expired() # 检查会话session的key在数据库中是否存在 request.session.exists("session_key") #session_key就是那个sessionid的值 # 删除当前会话的全部Session数据 request.session.delete() # 删除当前的会话数据并删除会话的Cookie。 request.session.flush() #经常使用,清空全部cookie # 设置会话Session和Cookie的超时时间 request.session.set_expiry(value) * 若是value是个整数,session会在些秒数后失效。 * 若是value是个datatime或timedelta,session就会在这个时间后失效。 * 若是value是0,用户关闭浏览器session就会失效。 * 若是value是None,session会依赖全局session失效策略。
<br/> ## 5.Django中的Session配置
django中默认支持session, 其内部提供了5种类型的session供开发者使用
1. 数据库Session SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) 2. 缓存Session SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也能够是memcache),此处别名依赖缓存的设置 3. 文件Session SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 SESSION_FILE_PATH = None # 缓存文件路径,若是为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 4. 缓存+数据库 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎 5. 加密Cookie Session SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎 其余公用设置项: SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认),可用于反爬虫 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认) SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认) SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认) SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过时(默认) SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改以后才保存(默认)
<br/> ## 6.使用session实现简单的登录校验,注销
def login(request): if request.method == 'GET': return render(request,"login.html") else: username = request.POST.get("username") password = request.POST.get("password") # 查询用户名和密码 ret_obj_list = models.UserInfo.objects.filter(username=username,password=password) if ret_obj_list.exists(): request.session['session_login'] = True request.session['username'] = username # session中的数据至关于data = {"session_login":True,"user":username} return redirect("index") else: return render(request,"login.html") def index(request): print(request.COOKIES) ret = request.session.get("session_login") # 也能够这么写 ret = request.session["session_login"] print(ret, type(ret)) if ret!=True: return redirect("login") else: username = request.session.get("username") return render(request, "index.html",{"username":username}) def logout(request): request.session.flush() return redirect('logout')
login.html
urls中login页面的别名为login,注销的url别名为‘logout’
<form action="{% url 'login' %}" method="post"> {% csrf_token %} <table> <tr>用户名<input type="text" name="username" id="username"></tr> <tr>密码<input type="password" name="password" id="password"></tr> <tr><input type="submit" value="登陆"></tr> <tr><a href="{% url 'logout' %}">注销</a></tr> </table> </form>
index.html
<h1>欢迎{{ username }}来到主页</h1>