跨域那些事(2)

上一篇文章有些細節沒有講明白.

比如我說redis做存儲化比較安全,那爲何我不用redis去存用戶登錄名呢,雖然cookie中存當前登錄名被改不會有什麼影響,但是這裏涉及到一些redis的使用.

redis是一種key-value映射的高效存儲方式,從內存中讀取數據,速度非常quick.如果我能確定key的唯一性,我自然可以使用redis的set key value.但是當前用戶名存儲,我們該用什麼樣的key呢.current_username?如果用這個,所有人都使用這個key,大家會根據登錄先後順序去覆蓋current_username對應的鍵值.這樣根本就達不到我們的要求.

同樣的token也是一樣,如果單純地用auth_token作爲鍵名,只要有人登錄過,其他人都可以從redis裏面讀取到,也就失去了auth的效果.

這就是爲什麼多個系統之間要做單點登錄的原因,甚至單獨做個系統來做單點登錄的接入口.

In a word,事情並沒有我們想的那麼簡單.我仔細思考後決定利用key的唯一確定,去規避共享redis data的弊端.

username還是交給cookie去弄,在token的寫入的時候,用username+key的方式,如下:

$this->MyRedis->set($user_name . ‘_auth_token‘, ‘xxsdrewercdscerrtc‘, 3000);

跨域之後讀取的時候:

$auth_token = $this->MyRedis->get($_COOKIE[‘login_name‘] . ‘_auth_token‘);

loginout的時候redis在del這個key,保持唯一性.

總結:使用任何技術一定要考慮周全,盲目使用任何都是沒有什麼卵用.

时间: 2024-08-02 11:04:14

跨域那些事(2)的相关文章

谈谈跨域那些事

跨域是很多phper,jser都会遇到的一个问题.解决数据在不同域名之间传递有很多方法,比如jsonp,比如setcookie,写入redis做持久化存储等.关于用哪种方式去处理跨域问题,仁者见仁智者见智,我根据我实际问题来分析. 前段时间我遇到了两个域下面的系统之间保持登录状态和权限的需求. 问题描述和目标:a.test.com和b.test.com,在a.test.com登录后,去b.test.com拥有同样的登录状态和权限. 关于登录状态,在我的需求里面只是简单的需要传递用户登录名.权限方

前端跨域的那些事

这一节,我们来讲一讲,前端跨域的那些事,主要分成这样的几部分来讲解, 一.为什么要跨域? 二.常见的几种跨域与使用场景 2.1 JSONP跨域 2.2 iframe跨域 2.3 window.name 跨域 2.4 document.domain 跨域 2.5 cookie跨域 2.6 postMessage跨域 三.总结 一.为什么要跨域 跨域,通常情况下是说在两个不通过的域名下面无法进行正常的通信,或者说是无法获取其他域名下面的数据,这个主要的原因是,浏览器出于安全问题的考虑,采用了同源策略

JSON跨域读取那点事(JSONP跨域访问)

最近在码一个小项目,需要远程读取json.因为需求很少,如果引用jquery使用其getjson方法就显得很浪费嘛= = 这篇文章很详细的解释了JSON跨域读取的前世今生,把原理讲得很透彻.特此分享. 原文链接:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强

nodejs之mock与跨域代理的三两事

emmm...好久没写博客了,都忘了该怎么开始. 那就先说下mockjs.因为一些原因,导致后台接口没有数据,那么我们就开始自己造数据,使用的是比较流行mockjs,根据文档就能简单的配置,然后开始愉快的玩耍了.(真香) 然后某天后台出数据了,又因为某些问题(跨域),导致我又没法愉快的玩耍,嗯,就是这样的,才有了今天这篇博客(口水话). 使用的是nodejs做跨域代理,非常简单,先贴代码: 1 var express = require('express'); 2 var router = ex

跨域单点登录系统的设计与实现

跨域单点登录系统的设计与实现 一.跨域单点登录系统整体设计 1. 系统架构 如上图所示:在系统存在一个认证中心以及多个站点.用户信息统一由认证中心管理,在其它子站的登录均会跳转到认证中心来登录. 2. 工作流程 单点登录系统的关键在于,当用户从一个子站登录后,它会在认证中心生成ticket标识,只要该标识存在就代表用户已经成功登陆了.每个子站在进入之前,无论本地ticket标识是否存在,均会去请求一次认证中心,要做的事情如下:如果子站ticket不存在,并不一定代表用户没有从别的子站登录,但是如

JavaScript跨域

JavaScript跨域 js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性.也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相同.这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作. URL 说明 是否允许通信 http://www.a.com/a.jsh

跨域返回

JQUERY AJAX请求成功,返回了数据,但是不进SUCCESS的问题 [转] Posted on 2016-01-06 20:07 金-Fish 阅读(11596) 评论(1)  编辑 收藏 这几天一直被 ajax请求成功,返回了数据,但是不进success的问题困扰着,怎么弄就是解决不了,总以为 是:$(document).ready(function(){});没起作用,一直找页面加载的方法来试,整了好几天没整出来....今天比较幸运, 在网上找到了一篇关于这方面问题的文章,按上面的方法

IFrame跨域处理方法-Javascript

在漫长的前端开发旅途上,无可避免的会接触到ajax,而且一般情况下都是用在同一域下的ajax请求:但是如果请求是发生在不同的域下,请求就无法执行,并且会抛出异常提示不允许跨域请求,目前我没有找到明确的资料说明这是为什么,我觉得应该是出于安全性的考虑吧.纵然如此,要实现跨域访问的话,方法还是有的,而且不只一种,在这里介绍其中一种解决方案:如何利用iframe完成ajax的跨域请求. 如下图所示:域a.com的页面request.html(即http://a.com/request.html)里面嵌

html5 postMessage解决跨域、跨窗口消息传递(转)

仅做学习使用,原文链接:http://www.cnblogs.com/dolphinX/p/3464056.html 一些麻烦事儿 平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题 1.页面和其打开的新窗口的数据传递 2.多窗口之间消息传递 3.页面与嵌套的iframe消息传递 4.上面三个问题的跨域数据传递 postMessage() 这些问题都有一些解决办法,但html5引入的message的API可以更方便.有效.安全的解决这些难题.postMessage