1. 程式人生 > >php實現SESSION跨域

php實現SESSION跨域

稍微大一點的網站,通常都會有不只一個伺服器,每個伺服器執行著不同的功能模組或者不同的子系統,他們使用不同的二級域名,比如www.a.com、i.a.com、bbs.a.com。而一個整體性強的網站,使用者系統是統一的,即一套使用者名稱、密碼在整個網站的各個子系統中都是可以登入使用的。各個伺服器共享使用者資料是比較容易實現的,只需要在後端放個資料庫伺服器,各個伺服器通過統一介面對使用者資料進行訪問即可。但還存在一個問題,就是使用者在i.a.com登入之後,進入www.a.com時,仍然需要重新登入,基本的通行證的問題,對映到技術上,其實就是各個伺服器之間如何實現共享 SESSION 資料的問題。

為了解決這個問題,我們採用將 SESSION 的資料儲存資料庫的方式。關於PHP SESSION的掃盲這裡就不在累贅。在預設情況下,各個伺服器會各自分別對同一個客戶端產生 SESSION ID,如對於同一個使用者瀏覽器,www.a.com系統產生的 SESSION ID 是a0211e9de3192ba6c22992d27a1b6a0a,而i.a.com生成的則是277003f262f0c366946a86a28ba431d8。另外,PHP 的 SESSION 資料都是分別儲存在本伺服器的檔案系統中。

想要共享 SESSION 資料,那就必須實現兩個目標:www.a.com和i.a.com所產生的SESSION ID相同,並且可通過同一個 COOKIE 進行傳遞,也就是說各個伺服器必須可以讀取同一個名為 PHPSESSID 的 COOKIE;另一個是 SESSION 資料必須存放在一個各個系統都能訪問到的地方。簡單地說就是多伺服器共享客戶端的 SESSION ID,同時還必須共享伺服器端的 SESSION 資料。

第一個目標的實現其實很簡單,只需要對 COOKIE 的域(domain)進行特殊地設定即可,預設情況下,COOKIE 的域是當前伺服器的域名/IP 地址,而域不同的話,各個伺服器所設定的 COOKIE 是不能相互訪問的,如 www.a.com 的伺服器是不能讀寫 www.b.com 伺服器設定的 COOKIE 的。這裡我們所說的同一網站的伺服器有其特殊性,那就是他們同屬於同一個一級域,如:www.a.com 和 i.a.com 都屬於域 .a.com,那麼我們就可以設定 COOKIE 的域為 .a.com,這樣 www.a.com、i.aaa.com 等等都可以訪問此 COOKIE。PHP 程式碼中的設定方法如下:

1 ini_set('session.cookie_domain''.a.com');

這樣各個系統共享同一客戶端 SESSION ID 的目的就達到了,下面就是共享SESSION資料,我們就將SESSION資料放在資料庫中,首先建立資料庫表:

1 CREATE TABLE sessions (
2 session_id varchar(32) NOT NULL,
3 session_last_access int(10) unsigned,

相關推薦

php實現SESSION

稍微大一點的網站,通常都會有不只一個伺服器,每個伺服器執行著不同的功能模組或者不同的子系統,他們使用不同的二級域名,比如www.a.com、i.a.com、bbs.a.com。而一個整體性強的網站,使用者系統是統一的,即一套使用者名稱、密碼在整個網站的各個子系統中都是可以登入使用的。各個伺服器共享使用

shiro原始碼分析篇5:結合redis實現session

相信大家對session跨域也比較瞭解了。以前單臺伺服器session本地快取就可以了,現在分散式後,session集中管理,那麼用redis來管理是一個非常不錯的選擇。 在結合redis做session快取的時候,也遇到了很多坑,不過還算是解決了。 和上篇講述一樣,實現自定義快

php解決session,驗證碼無效問題。

isset($_GET['getcode']) 最近在專案中遇到.net域名下通過iframe載入.cn域名網站。註冊的時候驗證碼失效了。其中也找到了辦法,不過不相容ie8及以下瀏覽器。一直反覆測試。今天終於成功了。 對於上面的一句話的前半句解釋下,估計有的同學搞不懂邏

java結合wabacus實現sessionsession共享(第二版)

宣告:該版相對於第一版有所改進。原因:每一版存在session覆蓋問題,分析如下: request().getServletContext().setAttribute("globelSession", session); 我們可以把globelSession想象成是索引

JSP Ueditor 實現圖片上傳

img 上傳 .com 圖片 地址 ued 跨域 image con Ueditor的單圖上傳,在官方文檔上明確寫了不支持 然後通過百度找了許多方案,終於有一個可以解決了。 http://www.cnblogs.com/hpnet/p/6290452.html 不

JSONP實現Ajax

images cnblogs log 方式 clas 一個 nbsp submit har 同源策略,它是由Netscape提出的一個著名的安全策略。 現在所有支持JavaScript 的瀏覽器都會使用這個策略。 所謂同源是指,域名,協議,端口相同。 當一個瀏覽器的兩個ta

問題相關知識詳解(原生js和jquery兩種方法實現jsonp

syn con 加載 developer 兩種方法 ray exe 編寫 分組 1、同源策略 同源策略(Same origin policy),它是由Netscape提出的一個著名的安全策略。同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽

node實現jsonp

text con 跨域 require test eof file jsonp跨域 data 1. 搭建node server //引入模塊 var http=require("http"); var fs=require("fs");var url = require

實現AJAX訪問方式一

nbsp any logs type pin web ted class pattern 1.添加pom依賴 <dependency> <groupId>com.thetransactioncompany</groupId>

Java實現CORS請求

先來 pty contain type 資源共享 服務端 header req options 問題 使用前後端分離模式開發項目時,往往會遇到這樣一個問題 -- 無法跨域獲取服務端數據 這是由於瀏覽器的同源策略導致的,目的是為了安全。在前後端分離開發模式備受青睞的今天,前

thinkphp中session問題

cto jpg access car ls參數 -c style 使用 應用 問題描述 《thinkphp實現短信驗證註冊》中,小編不止記錄了短信驗證碼的實現方法,同時還記錄了圖片驗證碼的實現方法。本地使用,一切正常;後端項目和前端項目都部署到服務器,一切正常;後端項目部署

nginx 實現 ajax 請求

ini syn methods acc -m www eth tran 響應 原文:http://www.nginx.cn/4314.html AJAX從一個域請求另一個域會有跨域的問題。那麽如何在nginx上實現ajax跨域請求呢?要在nginx上啟用跨域

PHP】Ajax解決方案 、jsonp、cors

code col 服務器 實現 官方 跨域傳輸 ref 響應 非官方 參考文章: 1、https://blog.csdn.net/u014727260/article/details/72793459 (後臺java,實際上差不多) 2、 如何解決ajax跨域傳輸 數據的問

C# MVC 實現 ajax

tle main back pts bject object 實現 llb json js$(function() { $.ajax({ url: "http://localhost:1266/test/t", data: { "a": 1

使用Spring Session和Redis解決分布式Session共享問題

默認 mark value des nested project pty 錯誤 lte 前言 對於分布式使用Nginx+Tomcat實現負載均衡,最常用的均衡算法有IP_Hash、輪訓、根據權重、隨機等。不管對於哪一種負載均衡算法,由於Nginx對不同的請求分發到某一個To

tp5+ajax 實現jsonp

否則 需要 服務 框架 註意 和我 tp5 return 就是 好久沒更新博客了,今天加了會班,領導布置了一個需求,由於上線網站是編輯器開發的,這就需要混合開發了,需求模塊有一個模塊需要和我已經布置好阿裏雲的另一個域名交互開發,也就是說我用tp5框架搭建了A後臺 需要和另一

利用原生js實現ajax請求資料

首先,頁面中不需要引入任何的檔案。 1、前臺html頁面 <script> //定義一個ajax var $ = { ajax:function(option){ var url = option.url; var ca

php解決vue問題

在入口檔案中加如下程式碼 //// 准許跨域請求。 header("Access-Control-Allow-Origin: * "); header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE"); /** *

php ajax jsonp 兩種方式

第一種方式客戶端程式碼案例 第一種方法重點是服務端加header頭------》header("Access-Control-Allow-Origin: *"); 客戶端程式碼 header("Access-Control-Allow-Origin: *"); $data = $r

php 和ajax問題的解決方案

本文通過設定Access-Control-Allow-Origin來實現跨域。 例如:客戶端的域名是client.runoob.com,而請求的域名是server.runoob.com。 如果直接使用ajax訪問,會有以下錯誤: XMLHttpRequest cannot load http://s