原理
token一般用在两个方面:防止表单重复提交和csrf,我这里只说防止表单重复提交。
他的工作原理是这样的:我们访问表单页面,服务器在返回表单页面时,会生成一个token值,保存在session中,并把这个值传给表单页面,当我们输入用户名密码后,点击提交,会把用户名密码以及token一起提交,服务器会把提交过来的token值与session中的值相比,如果相同就通过验证,不同就不通过,即使用户名密码是对的也不会通过。token验证成功后,会更新一个新的token,如果进行重复提交,那么提交过来的token还是原来的token值,而服务器session中的值已经更新了,就会验证失败,从而防止了重复提交表单。
举个例子:
访问一个登陆页面,服务器收到请求后,生成一个token值(比如aaa),分别保存在服务器的session中(aaa)和返回的页面中(aaa),然后我们输入用户名密码,点击提交,向服务器发送的数据包含三个值:用户名、密码、保存在表单页面中的token(aaa),服务器收到后,会将计较过来的token(aaa)与保存在session中的值(aaa)对比,相同,通过token验证。可以进行接下来的用户名密码验证等。并且会更新session中的值(比如变成bbb),如果表单重复提交,那么提交上来的token值依然是aaa,与session中的值(bbb)不同,验证失败。这样就可以做到防止表单重复提交,但是依然有办法破解。