logout退出登录该用get方法还是post方法?

logout退出登录,应该用post方法。

在2010年前使用get方法退出账号是推荐的选择,只要给个链接点击就行了。
但是由于之后出现的web加速器/代理的预抓取功能,会在用户访问页面时,抓取所有链接缓存下来。这将导致用户点击退出按钮时,web将直接返回给你“退出登录”页面,而实际上并没有退出登录(注销session信息)。当然,好的加速器,会过滤“退出”页面,但毕竟是个隐患。

post应该用于“破坏性操作”,而不会改变应用内部状态的操作(比如查询)则用get方法。

遵循这一原则,退出应用程序是否被认为是破坏性的行为,是否改变了应用程序的内部状态?这是有争议的。
注销session信息,它改变了与应用程序相关的用户状态,对应用程序本身的数据却没有什么影响。

推荐的做法:任何用户发起的操作都应该使用该post(例如,用户单击“登出”),而get可以保留给应用程序发起的登出(例如,检测潜在用户入侵的异常使用登出get强制重定向到登录页面)

在REST风格的api设计的应用程序中退出,用户退出登录没有涉及session信息,并没有破坏服务端信息,但退出登录的方式变为手动清除cookie,这是很难接受的退出方式。也有一部分人认为,在REST风格中退出登录属于“delete”操作,应该用delete方法,这就见仁见智了。

使用get方法还有一个隐患,如果有人(通常是竞争者)在其网站上伪造图片链接src="<你的退出链接>",这将导致用户点击图片在不知情的情况下退出了你的网站上的登录。
当然,有网站甚至基于此推出一项服务,防止用户忘记多个网站的登录,导致信息泄露,而将其他多个常用网站的登录信息注销。比如这个网站https://superlogout.com/

所以,现在web应用退出登录,还是用post方法比较好。

你可能感兴趣的:(php,logout,退出登录)