当前位置: 首页 > news >正文

有关网站建设国内外现状的文献南京建网科技有限公司

有关网站建设国内外现状的文献,南京建网科技有限公司,怎么自己做网站盗qq,wordpress外贸建站教程文章目录 Cookie实践运行结果 CSRF防止CSRF Session实践 Cookie 理论上#xff0c;一个用户的所有请求燥作都应该属于同一个会话#xff0c;而另一个用户的所有请求操作则应该属于另一个会话#xff0c;二者不能混淆#xff0c;而web应用程序是使用HTTP协议传输数据的。HTT… 文章目录 Cookie实践运行结果 CSRF防止CSRF Session实践 Cookie 理论上一个用户的所有请求燥作都应该属于同一个会话而另一个用户的所有请求操作则应该属于另一个会话二者不能混淆而web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕客户端与服务器端的连接就会关闭再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。要跟踪该会话必须引入一种机制。Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前基本上所有的网站都采用Cookie来跟踪会话。Cookie实际上是一小段的文本信息。客户端请求服务器如果服务器需要记录该用户状态就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。由于HTTP是一种无状态的协议服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧每人一个无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。cookie本身由服务器生成通过Response将cookie写到浏览器上下一次访问浏览器会根据不同的规则携带cookie过来。注意:cookie不能跨浏览器一般不跨域设置cookie(使用response设置)response.set_cookie(key,value[,max_ageNone,expiresNone])max_age:整数 单位为秒指定cookie过期时间设置为None:浏览器关闭失效,默认值expires:指定过期时间还支持datetime或timedelta可以指定一个具体日期时间expiresdatetime.datetime(2030, 1, 1, 2, 3, 4)或 datetime.datetime.now() datetime.timedelta(days10)注意:max_age和expries两个选一个指定# response.set_cookie( username, username, max_age10)# response.set_cookie( username username1, expiresd)获取cookie(使用request获取):request.COOKIES.get(username) 删除cookie(使用response删除):response.delete_cookie(username)cookie存储到客户端 优点:数据存在在客户端减轻服务器端的压力提高网站的性能。 缺点:安全性不高: 在客户端机很容易被查看或破解用户会话信息实践 新建一个项目 Day05DjangoPro02我就不写连接数据库了 路由Day05DjangoPro02\urls.py from django.contrib import admin from django.urls import path from App.views import *urlpatterns [path(, index),path(index/, index, nameindex),path(login/, login, namelogin),path(logout/, logout, namelogout),path(admin/, admin.site.urls),] App\views.py import datetimefrom django.shortcuts import render, redirect, reverse, HttpResponse# 注销、登出 def logout(request):# 不能直接return render重新渲染是不可以的我们一定要重新进入index页面所以要跳转一下路由也要变response redirect(reverse(index))# 删除cookie注销response.delete_cookie(userid)return response# 首页 def index(request):# cookieuserid request.COOKIES.get(userid, 0) # 如果没找到就默认给个0# 获取登录的用户(查数据库,这边就不写查数据库了)user Noneif userid ! 0:user {username: admin}return render(request, index.html, {user: user})# 登录 def login(request):if request.method GET:return render(request, login.html)elif request.method POST:# 1.先接收前端提交过来的数据username request.POST.get(username)password request.POST.get(password)# 2. 登录验证# 查数据库这边就不写数据库了if username admin and password 123456:# 3. 设置cookie# 注意a. cookie是存储在浏览器本地# b. cookie不能跨域不能跨浏览器# c. cookie存储的内容是字符串不能为中文一般存储大小不要超过4KB# d. cookie由后端生成创建返回给前端保存response redirect(reverse(index))# response.set_cookie(userid, 666) # 创建cookie# 默认设置是当前浏览器打开的时候如果把整个浏览器关掉,再打开userid就会没有# 一般需要设置过期时间# response.set_cookie(userid, 999, max_age7 * 24 * 3600) # 7天 max_age:秒# response.set_cookie(userid, 555, expiresdatetime.datetime(2023, 8, 31, 3, 4, 5))# 过期具体的日期 expires 2023.8.31 3小时4分5秒response.set_cookie(userid, 555, expiresdatetime.datetime.now() datetime.timedelta(days10)) # 10天后的日期# 4. 跳转到登录页面return responsereturn HttpResponse(登录失败账号是admin密码是123456) templates\login.html !DOCTYPE html html langen headmeta charsetUTF-8title登录/title /head bodyh2登录/h2hrform action methodpost{% csrf_token %}p用户名input typetext nameusername //pp密码input typetext namepassword //ppbutton登录/button/p/form /body /htmltemplates\index.html !DOCTYPE html html langen headmeta charsetUTF-8title首页/title /head bodyh2首页/h2hr{% if user %}当前登录的用户{{ user.username }}a href{% url logout %}注销/a{% else %}a href{% url login %}登录/a{% endif %} /body /html运行结果 登录前http://127.0.0.1:8000 登录成功看cookie 点击注销看cookie CSRF CSRF全拼为Cross Site Request Forgery跨站请求伪造。CSRF指攻击者盗用了你的身份以你的名义发送恶意请求 包括:以你名义发送邮件发消息盗取你的账号甚至于购买商品虚拟货币转账… 造成的问题: 个人隐私泄露以及财产安全。 防止CSRF Django下的CSRF预防机制 django第一次响应来自某个客户端的请求时会在服务器端随机生成一个 token把这个 token 放在cookie里。然后每次 POST请求都会带上这个 token这样就能避免被 CSRF攻击。django在setting.py文件中有一个中间件CsrfViewMiddlewaredjango会在内部自动生成token并且将token返回给前端。这个cookie主要是跟后台做校验的在内部会自己做校验。 方法一不推荐在setting.py文件中把中间件注释 方法2在Post请求时表单中添加 {% csrf_token %} 通过自动加token的方式防止CSRF form action methodpost{% csrf_token %} /formCSRF verification failed. Request aborted. CSRF验证失败。请求中止。 Session 服务器端会话技术,依赖于cookie.django中启用SESSIONsettings中INSTALLED_APPS:django.contrib.sessionsMIDDLEWARE:django.contrib.sessions.middleware.SessionMiddleware基本操作设置Sessions值 (使用request设置)request.session[user_id] user.idrequest.session.set_expiry(86400) # 设置过期时间获取Sessions值get(key,defaultNone) 根据键获取会话的值username request.session.get(user_id)#或 session_name request.session[session_name]删除Sessions值# 获取当前请求的session的keysession_key request.session.session_keydel request.session[session_key]# request.session.delete(session_key)flush() 删除当前的会话数据并删除会话的cookieclear() 清除所有会话数据存储到数据库中会进行编码使用的是Base64每个HttpRequest对象都有一个session属性也是一个类字典对象settings中本身就配置好了 生成迁移文件: python manage.py makemigrations 执行迁移: python manage.py migrate Session数据存储到数据库中会进行编码使用的是Base64。如果我们设置了Session数据库是有东西的。 实践 在之前上面写好的基础改一下把cookie改成session。 App\views.py import datetimefrom django.shortcuts import render, redirect, reverse, HttpResponse# 注销、登出 def logout(request):# 不能直接return render重新渲染是不可以的我们一定要重新进入index页面所以要跳转一下路由也要变response redirect(reverse(index))# 删除cookie注销# response.delete_cookie(userid)# 删除session注销session_key request.session.session_key # 得到的是当前session会话的sessionid(前端cookie存的sessionid的值)print(session_key)request.session.delete(session_key) # 数据库里的session_key那条记录也会被删掉return response# 首页 def index(request):# # cookie# userid request.COOKIES.get(userid, 0) # 如果没找到就默认给个0# sessionuserid request.session.get(userid, 0) # 一般我们都设置默认值默认给个0, 如果不设置就是None# 获取登录的用户(查数据库,这边就不写查数据库了)# user UserModel.objects.filter(iduserid).first()# .filter(idNone) 会报错user Noneif userid ! 0:user {username: admin}return render(request, index.html, {user: user})# 登录 def login(request):if request.method GET:return render(request, login.html)elif request.method POST:# 1.先接收前端提交过来的数据username request.POST.get(username)password request.POST.get(password)# 2. 登录验证# 查数据库这边就不写数据库了if username admin and password 123456:response redirect(reverse(index))# # 3. 设置cookie# # 注意a. cookie是存储在浏览器本地# # b. cookie不能跨域不能跨浏览器# # c. cookie存储的内容是字符串不能为中文一般存储大小不要超过4KB# # d. cookie由后端生成创建返回给前端保存# response redirect(reverse(index))# # response.set_cookie(userid, 666) # 创建cookie# # 默认设置是当前浏览器打开的时候如果把整个浏览器关掉,再打开userid就会没有# # 一般需要设置过期时间# # response.set_cookie(userid, 999, max_age7 * 24 * 3600) # 7天 max_age:秒# # response.set_cookie(userid, 555, expiresdatetime.datetime(2023, 8, 31, 3, 4, 5))# # 过期具体的日期 expires 2023.8.31 3小时4分5秒# response.set_cookie(userid, 555, expiresdatetime.datetime.now() datetime.timedelta(days10)) # 10天后的日期# 3. 设置sessionrequest.session[userid] 888request.session.set_expiry(7 * 24 * 3600) # 7天 max_age:秒# 4. 跳转到登录页面return responsereturn HttpResponse(登录失败账号是admin密码是123456) http://127.0.0.1:8000/login/ 登录之后我们可以看到生成了一个cookie名字叫sessionid所以说session是依赖于cookie但是在cookie存的是sessionid并且它的值是经过编码的 看sessionid这个值跟数据库里session_key是对应的。session_data也是经过编码加密的这个数据里面会存放我们刚刚添加的userid的值expire_date是过期时间。真正的数据是存在后台的所以我们说session是存在于服务器端的会话技术。 下次前端访问后端的时候它会把sessionid传过来sessionid传过来之后我们也不会得到sessionid你得到的还是我们刚刚添加的userid在内部它会自动查数据库并且把对应的userid的值取出来所以存也好取也好django都做好了。 注销之后数据库里的session_key那条记录也会被删掉。
http://www.huolong8.cn/news/32834/

相关文章:

  • 2020电商网站排行榜怎么注册自己网站吗
  • 外贸网站做推广网站设置密码
  • 四川网站建设贴吧wordpress登录下载文件
  • 网站建设综合wordpress 扫描
  • 湛江怎样建设自己的网站东莞网络营销推广公司
  • 淄博网站seo公司黄山旅游攻略2022
  • 商会网站模板网站设计发展趋势
  • 网站建设免费域名刚做的网站怎么知道有没有潜在的
  • 做网站为什么要备案做网贷网站多少钱
  • 建网站公司下载快手网站经营模式
  • 网站建设服务怎么样福州思企互联网站建设公司
  • 邯郸哪里可以学建网站陈村网站开发
  • 上海市网站seowordpress产品页面静态化
  • 做网站需要报备什么如何给网站添加cnzz
  • 如东网站建设哪家好北京市工程信息网
  • 网站建设原则包括哪些方面百度百科官网
  • wordpress 设置ftp怎么给网站做优化
  • 企业网站建设套餐费用《网站开发实例》pdf下载
  • 哪里有网站建设手机网站目录结构构建的原则是以
  • 成都网站建设公司汇总为什么不用wordpress
  • 长春网站推广公司百度排行榜风云榜小说
  • 河北城乡建设学校网站中国vs菲律宾世预赛
  • wordpress小说站企业网站建设作用
  • 企业网站建设的方案ppt群网站建设合同
  • 烟台市网站建设美橙极速建站系统
  • 网站建设如何把更改内容眼查看网站开发语言
  • 网站建设维护工作南昌地宝网二手车
  • 如何虚拟一个公司网站搭建WordPress教程
  • wordpress一小时建站网站建设优化收费
  • 网站首页的尺寸做多大微信开发人是谁