python socket编程:实现redirect函数、cookie和session

在Flask框架中有一个redirect函数,用于实现页面的跳转,现在我们来实现它。原理就是:当浏览器接受到服务器响应的状态码是301或者302时,表示请求的页面已经永久或临时性转移到了新的位置,而这个新的位置储存在响应的header里Locaiton这个字段。例如一个实现跳转的响应如下:

HTTP/1.1 302 OK 

Content-Type: textml

Location: /login

这是一个很简单的http响应,状态码302表示原先请求的网页临时性转移到了/login('OK'这个没有影响,可以改成任意东西,如'JUMP'),很明显这就是用户请求的页面是需要登录才能查看的。因此redirect函数可以这样写:

实现cookie和session

cookie的实现很简单,在服务器返回的响应中,header里增加Set-Cookie,浏览器接受到Set-Cookie中的value,下次访问这个网站的请求中就会带上这个cookie。编写一个增加cookie的函数:

假设用户登录验证成功之后,我们用add_cookie将其用户名username存入到cookie中返回给浏览器,例如承接前文,用户登录成功后给其返回一个302跳转的响应,我们在其中再加入cookie,此时response如下:

扫描二维码关注公众号,回复: 6017980 查看本文章

那么浏览器下次请求,request的header里就会带上Cookie: Harp这一行了。此时服务端解析request,根据cookie就知道当前用户是登陆状态的。

显然,直接在cookie里写用户的username是不安全的。我们可以把username存在session里,假设session是一个字典,用户登录验证成功后,随机生成一个长的字符串session_id作为key,username作为value存入session中,然后把session_id作为cookie返回给浏览器,浏览器下次请求时候带上的cookie内容为这个session_id,我们去session里取对应的value即可。

猜你喜欢

转载自blog.csdn.net/qq_40925239/article/details/89516650