django如何获取用户cookies(2023年最新分享)

导读:本篇文章首席CTO笔记来给大家介绍有关django如何获取用户cookies的相关内容,希望对大家有所帮助,一起来看看吧。

django request判断是否有cookie

使用模板的情况和不使用模板的情况都做了测试, 可以向浏览器设置cookies, 在客户端可以用javascript 取出来:

程序代码

function getCookie(c_name)

{

if (document.cookie.length0)

{

c_start=document.cookie.indexOf(c_name + "=")

django如何获取用户cookies(2023年最新分享)  第1张

django cookie在html里怎么读

浏览器的开发者在很早的时候就已经意识到, HTTP's 的无状态会对Web开发者带来很大的问题,于是(cookies)应运而生。 cookies 是浏览器为 Web 服务器存储的一小段信息。 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies

来看看它是怎么工作的。 当你打开浏览器并访问 google.com ,你的浏览器会给Google发送一个HTTP请求,起始部分就象这样:

GET / HTTP/1.1

Host: google.com

...

当 Google响应时,HTTP的响应是这样的:

HTTP/1.1 200 OK

Content-Type: text/html

Set-Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671;

expires=Sun, 17-Jan-2038 19:14:07 GMT;

path=/; domain=.google.com

Server: GWS/2.1

...

注意 Set-Cookie 的头部。 你的浏览器会存储cookie值( PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671 ) ,而且每次访问google 站点都会回送这个cookie值。 因此当你下次访问Google时,你的浏览器会发送像这样的请求:

GET / HTTP/1.1

Host: google.com

Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671

...

于是 Cookies 的值会告诉Google,你就是早些时候访问过Google网站的人。 这个值可能是数据库中存储用户信息的key,可以用它在页面上显示你的用户名。 Google会(以及目前)使用它在网页上显示你账号的用户名。

存取Cookies

在Django中处理持久化,大部分时候你会更愿意用高层些的session 和/或 后面要讨论的user 框架。 但在此之前,我们需要停下来在底层看看如何读写cookies。 这会帮助你理解本章节后面要讨论的工具是如何工作的,而且如果你需要自己操作cookies,这也会有所帮助。

读取已经设置好的cookies极其简单。 每一个`` HttpRequest`` 对象都有一个`` COOKIES`` 对象,该对象的行为类似一个字典,你可以使用它读取任何浏览器发送给视图(view)的cookies。

def show_color(request):

if "favorite_color" in request.COOKIES:

return HttpResponse("Your favorite color is %s" % request.COOKIES["favorite_color"])

else:

return HttpResponse("You don't have a favorite color.")

写cookies稍微复杂点。 你需要使用 HttpResponse对象的 set_cookie()方法。 这儿有个基于 GET 参数来设置 favorite_color

cookie的例子:

def set_color(request):

if "favorite_color" in request.GET:

# Create an HttpResponse object...

response = HttpResponse("Your favorite color is now %s" % request.GET["favorite_color"])

# ... and set a cookie on the response

response.set_cookie("favorite_color",

request.GET["favorite_color"])

return response

else:

return HttpResponse("You didn't give a favorite color.")

你可以给 response.set_cookie() 传递一些可选的参数来控制cookie的行为

好坏参半的Cookies

也许你已经注意到了,cookies的工作方式可能导致的问题。 让我们看一下其中一些比较重要的问题:

cookie的存储是自愿的,一个客户端不一定要去接受或存储cookie。 事实上,所有的浏览器都让用户自己控制 是否接受cookies。 如果你想知道cookies对于Web应用有多重要,你可以试着打开这个浏览器的 选项:

尽管cookies广为使用,但仍被认为是不可靠的的。 这意味着,开发者使用cookies之前必须 检查用户是否可以接收cookie。

Cookie(特别是那些没通过HTTPS传输的)是非常不安全的。 因为HTTP数据是以明文发送的,所以 特别容易受到嗅探攻击。 也就是说,嗅探攻击者可以在网络中拦截并读取cookies,因此你要 绝对避免在cookies中存储敏感信息。 这就意味着您不应该使用cookie来在存储任何敏感信息。

还有一种被称为”中间人”的攻击更阴险,攻击者拦截一个cookie并将其用于另一个用户。 第19章将深入讨论这种攻击的本质以及如何避免。

即使从预想中的接收者返回的cookie也是不安全的。 在大多数浏览器中您可以非常容易地修改cookies中的信息。有经验的用户甚至可以通过像mechanize() 这样的工具手工构造一个HTTP请求。

因此不能在cookies中存储可能会被篡改的敏感数据。 在cookies中存储 IsLoggedIn=1 ,以标识用户已经登录。 犯这类错误的站点数量多的令人难以置信; 绕过这些网站的安全系统也是易如反掌。

django forms怎么获取登录用户

Django获取登陆用户的手段就是request.user。

如果你想传给form字段,可以先做一个model的object实例,把request.user传给这个object实例的相关字段,然后把这个实例传给forms实例即可。

Django-cookie

无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。

比如我们在没引入cookie验证之前,我们输入 进入页面登录操作,理论上我们必须完成登录后才能进行后续操作,如果服务器不告诉浏览器就是把键值对交给浏览器,让浏览器与服务器建立关联。那么我们输入 同样也可以完成与页面的交互工作,从而失去了登录操作的意义。

一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的。

状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留。会话中产生的数据又是我们需要保存的,也就是说要“保持状态”。因此Cookie就是在这样一个场景下诞生。

Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。

cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。

我们使用Chrome浏览器,打开开发者工具。

设置cookie,rep是获取响应的对象

rep.set_cookie(key,value,...)

rep.set_signed_cookie(key,value,salt='加密盐', max_age=None, ...)

获取Cookie

request.COOKIES['key']

request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

为了进一步理解cookie的用法,我们这边由浅到深举个案例

进入页面登录操作,登录成功后页面跳转去 并提示已登录成功,同时将cookie以键值对的方式交付给浏览器,当输入 时浏览器会判断如果有cookie的话就返回提示已登录成功页面,否则让用户重新登录,从而实现了login页面与home页面的关联。

由下图可知 时,因为没找到cookie,所以就跳转到 页面。正确登录后就返回到home页面

在实务中我们登录后要操作页面不限于home页面,还有很多页面,由于实现的功能是一样的(就是把多页通过cookie取得关联)这时我们需要做个函数装饰器,当调用def home(resquest)时第一时间调用函数装饰器里对应的函数。

第一步:函数装饰器

第二步:

我们输入 时,因为浏览器找不到cookies,所以按照redirect('/login/?next={}'.format(next_url)),跳去

结语:以上就是首席CTO笔记为大家介绍的关于django如何获取用户cookies的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23 13:08
下一篇 2023-09-23 13:08

相关推荐

发表回复

登录后才能评论