1.SSAdmin
SSAdmin是一个集成Shadowsocks-python的ss安装管理工具,可以一键安装shadowsocks/多用户管理/端口流量控制/端口速度限制/可视化管理……只需要一分钟就可以实现以上功能。附赠优化教程。
项目地址:Shadowsocks-manager
优化教程:ZKeeer’s Blog——Shadowsocks优化
SSAdmin基于Ubuntu,暂不支持其他的linux发行版本。使用python3 setup.py install/start/restart来管理flask web。通过flask web的GUI来管理Shadowsocks,包括ss的设置/重启/停止;ss的多个端口(即多用户)管理,包括限速/限流/是否可用等等。
如果vps同时运行其他服务,或者想用80端口(默认是8000)运行,请安装nginx并进行合理配置。
整个目录的大体逻辑如下图:
2.总结
平时都是写后端和数据库/系统维护什么的,很少完成一个完整的web,甚至不够完整,也是第一次写前端。记录下踩到的坑以及如何解决的,这个过程中积累了哪些知识。
2.1前后端通信:我这里全都用了ajax,其中一个坑就是ajax无法按你的意愿处理302重定向请求。我是用ajax post用户名和密码进行验证,验证通过后跳转控制面板,但是试了很多次,页面正确返回了,但是前端没反应,通过F12才能看到返回的页面源码。查询了好多资料,才发现ajax处理302并不是一般的顺序。
当服务器将302响应发给浏览器时,浏览器并不是直接进行ajax回调处理,而是先执行302重定向——从Response Headers中读取Location信息,然后向Location中的Url发出请求,在收到这个请求的响应后才会进行ajax回调处理。大致流程如下:
ajax(post) -> browser -> server(return 302/location url) -> 302 -> browser(get 302/location) -> server(return location html) -> browser(location html) -> ajax callback
所以,如果你想在ajax请求中根据302响应通过location.href进行重定向是不可行的。
解决办法一:将302响应,改为返回json字符串,将302和重定向写入json由前端处理。
return json.dumps({"status":302,"location":"/admin"})
解决办法二:不用ajax,用其他方式,例如form。
2.2对话/密码存储:cookie和session。
首先大体介绍下cookie和session是什么,这两个什么关系,如何使用。
不要混淆cookie和session的概念!!!
session是一种抽象概念;cookie是一种真实存在的东西,是http定义在header中的字段。session是保存在服务器端的一个数据结构,用来追踪用户的数据状态,存储位置可以是集群、数据库、文件、内存等;cookie是保存信息的一种机制,用来保存用户数据。使用cookie来实现session也是一种方法。(后面会写一篇文章专门介绍cookie和session以及flask中的session实现,坑1)
2.3登陆逻辑
最开始的登陆逻辑如下:
用户输入密码后本地加密,然后上传服务器进行验证,然后服务器设置cookie返回结果。后来一想,这样把加密方式暴露了。后来改成了下面这样。
其实我觉得更好的方式,还应该再次加密,明文上传也不安全。本地加密后,上传加密的密码,服务器再进行一次加密,然后写入存储和cookie。登录逻辑可以细细研究,写一篇文章。(坑2)
2.4用户登出,清理本地数据。当用户登出的时候,需要清理存储在本地的cookie,当时查了好多资料如何删除cookie,才发现cookie不是用来删的,js没法删除cookie只能设置cookie一个超时时间,浏览器检测到cookie过了有效期就会自动清理。所以,要清理本地cookie就要js将cookie时间设置为过去的一个时间,等浏览器清理过期cookie。
写的有些乱,想到哪儿写到哪儿,当作一个手记。最后,欢迎体验。Do Not Be Evil.