服务器上面登陆网站,当我们登录一个网站的时候,服务器干了什么?

当我们登录一个网站的时候,发生了什么?

下面有几个问题,可以帮我们更好的理解这个问题。在登录一个网站的时候,点击登录的按钮之后,发生了什么:

1.1 浏览器如何把输入的账号和密码发送到服务器?

1.2 登录的时候发送的http请求是什么样的方法?get or post ?

1.3 这个http请求要发送给server哪里?

1.4 server收到http请求之后,如何拿到用户名和密码?

1.5 server拿到用户名和密码,如果在数据库查找?

1.6 第一次登录之后,如何实现下一次不需要登录,直接进入主界面?

1.7 cookie和session的原理

1.8 结合下面的这个flask的例子,分析一下cookie + session 实现不需要登录,直接进入主页面

结合下面的flask实现的登录+session 的例子来分析

代码如下:

"""

python3 + flask

"""

from flask import Flask

from flask import request, session

app = Flask(__name__)

@app.route('/login', methods=['POST', 'GET'])

def login():

# 如果是一个post请求

if request.method == 'POST':

if request.form['username'] == 'admin' or request.form['password'] == '123':

session['username'] = request.form['username']

return 'Admin login successfully!'

else:

return 'No such user!'

# 如果是一个get请求

print ("--test-- :",session)

if 'username' in session:

#如果创建过session,也就是说sesson里面会username的key,那么表示这个已经登录过

return 'Hello %s!' % session['username']

# 如果没有登录

else:

title = request.args.get('title', 'Default')

return '''

sign in

'''

app.secret_key = '123456'

if __name__ == '__main__':

# 在浏览器里面输入 http://127.0.0.1:5555/login

app.run(debug=True,port=5555)

分析

从浏览器的角度来看:

1743e0630ab6

image.png

1743e0630ab6

image.png

当我们输入url的时候(注意,这里是第一次访问,如果之前访问过,就在浏览器里面清除一下访问记录 or 进入 隐身模式),浏览器发送http请求的header

1743e0630ab6

image.png

服务器给出的相应

1743e0630ab6

image.png

当写好账号和密码,点击登录的时候:

1743e0630ab6

image.png

这时候浏览器发送的http请求是:

1743e0630ab6

image.png

服务器的相应是(故意写错了账号和密码):

1743e0630ab6

image.png

相应的页面是:

1743e0630ab6

image.png

如果输入正确的账号和密码,如下图说是,那么会发生什么?

1743e0630ab6

image.png

浏览器发送的http请求是这样:

1743e0630ab6

image.png

服务器的响应是,如下图,注意http相应里面多了一个set-cookie的字段

1743e0630ab6

image.png

服务器相应的页面如下图说是,现在已经表示登录成功。

1743e0630ab6

image.png

那么,下次在访问的时候,因为已经登录过了,所以浏览器在发送http请求的时候,在里面加上一个cookie的字段,字段的value是上一次服务器给的。通过这个cookie,可以实现不需要登录直接进入主页面的feature。服务器收到http的请求之后,通过cookie,作为session的唯一标示,来访问sever上面session的值,这个值作为判断用户是否登录的标志。

在代码里面,是这样的:

# 如果已经登录,用户名存在session里面

if 'user' in session:

return 'Hello %s!' % session['user']

再一次访问的时候,直接登录成功。

1743e0630ab6

1743e0630ab6

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值