1. 为简单的满足分布式需求,用Cookie而不用Session。
谷歌登录JD.COM,IE访问还需要登录吗?
--由于不同的浏览器保存 Cookie 的方式也不同,所以同一台计算机上的不同浏览器不一定能够相互读取各自的 Cookie。
登录网站后,将cookie从当前电脑复制到另一台电脑,用同样的浏览器打开网站,需要重新登录吗?
--原理上可以
如何实现基于cookie的单点登录?跨域问题
--一个站点登录后往其他站点写cookie,利用jsonp传参
2. 获得移动端的登录信息可以用Cookie。
3. ajax调用跨域处理:
- response.setHeader("Access-Control-Allow-Origin","http://m.architectj.com/");//"*"允许所有域名
- response.setHeader("Access-Control-Allow-Credentials", "true");
- response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
4. request.getHeader("Referer")的作用
- 1,防止盗连,比如我是个下载软件的网站,在下载页面我先用referer来判断上一页面是不是自己网站,如果不是,说明有人盗连了你的下载地址。
- 2,电子商务网站的安全,我在提交信用卡等重要信息的页面用referer来判断上一页是不是自己的网站,如果不是,可能是黑客用自己写的一个表单,来提交,为了能跳过你上一页里的javascript的验证等目的。
- 使用referer的注意事项:
- 如果我是直接在浏览器里输入有referer的页面,返回是null(jsp),也就是说referer只有从别的页面点击连接来到这页的才会有内容。
- 我做了个实验,比如我的referer代码在a.jsp中,它的上一页面是b.htm,c.htm是一个带有iframe的页面,它把a.jsp嵌在iframe里了。我在浏览器里输入b.htm的地址,然后点击连接去c.htm,那显示的结果是b.htm,如果我在浏览器里直接输入的是c.htm那显示的是c.htm
- /**
- * 校验来源为qwexyz域
- * @param refer
- * @return
- */
- public static boolean checkRefer(String refer) {
- int start = refer.indexOf("//");
- if (start != -1 && refer.length() > start + 2) {
- refer = refer.substring(start + 2);
- int end = refer.indexOf("/");
- if (end != -1) {
- refer = refer.substring(0, end);
- if (refer.endsWith("qwexyz.com")) {
- return true;
- }
- }
- }
- return false;
- }
- /**
- * 过滤回调函数
- * @param callback
- * @return
- */
- public static String filter(String callback) {
- if (callback == null || "".equals(callback)) {
- return "";
- }
- if (callback.length() > 30) {
- callback = callback.substring(0,30);
- }
- callback = callback.replaceAll("[^\\w\\_\\.]"," ");
- return callback;
- }
5. jsonp解决跨域访问
- 传统的ajax ,往往是 XMLHttpRequest ,读取一个接口,返回类似: {“Name”: “小明”, “Rank”: 7} json值。一般我们都采用xmlhttprequest方法通过状态判断执行请求是否完毕。
- JSONP的使用模式里,该URL回传的是由自定义传入函数名,动态生成JSON作为该函数入参,这就是JSONP 的“填充(padding)”或是“前辍(prefix)”的由来。
- 请求:
- <script type="text/javascript"
- src="http://www.example.com/RetrieveUser?UserId=1823&callback=parseResponse">
- </script>
- 返回:
- parseResponse({"Name": "Cheeso", "Id" : 1823, "Rank": 7})
- 这个充分体现了js作为<strong>动态语言</strong>的特性。
6. 清除缓存
- response.setHeader("Pragma", "No-cache");
- response.setDateHeader("Expires", -1);
- response.setHeader("Cache-Control", "no-cache,no-store");
7. 为了保持和线上地址一致,本地测试时,配上正式域名指向127.0.0.1
原文链接:[http://wely.iteye.com/blog/2281172]