所谓Cross domain PHP Sessions,即不限于同一域名,不限于同一服务器,不限于同一IP的多个网站共享Session。
这种情况之下的Session共享,是一种极端情况,但却经常遇到。这是因为,我们常常有多站点单点登录,或共用用户数据库。一次登录多站可访问的通行证模式,是普遍受欢迎的方式。
实现的方法如下:
1、首先,你要使用memcache,memcached保存session, 从而能够使得session数据能够保存到不同域名,不同IP的服务器上。关于这一点,与多服务器共享Session的方法完全一样。所以,这里就不多讲了。
2、其次,保证多站点使用同一SESSIONID。这个方法很简单,只要把源站点的$_COOKIE['PHPSESSID']传给目标站点即可。我们清楚,PHP网站,总会在COOKIE中保存一个名为$_COOKIE['PHPSESSID']变量。所以,只要将这个传给目标站点即可。所以,接下来就是如何传的问题了。
3、建议的方法是,每一个网站建一个专用于跳转的PHP文件。此文件接收GET参数为目标跳转的URL。PHP只要根据参数生成象如下这样的代码即可:
header('Location: http://domain.com?sessid='.urlencode($_COOKIE['PHPSESSID']));
当然,这个PHP页面中,要对跳转的URL有所检测,是不是允许传入$_COOKIE['PHPSESSID']的域名。如果这个PHP文件我们称为siteurl.php,那么,页面中的链接就成了:
http://thisdomain.com/siteurl.php?url=newdomain.php
这样,页面中也就没有$_COOKIE['PHPSESSID']。
4、接受跳转的站点,可以通过以下途径读取这个共享的session.
在session_start()运行之前处理:
if ($_GET['sessid']){
session_id($_GET['sessid']);
}
这样,接受跳转的站点就可以读到已保存的session了
分享到:
相关推荐
$mojo_app->sessions( MojoX::Session::Simple->new({ default_expiration => 24 * 60 * 60, # 24 hours }) ); # In app.psgi, build mojo app to enable Plack::Middleware::Session::Simple. use Plack::...
There are many applications of the Internet that require the creation and management of a session, where a session is considered an exchange of data between an association of participants. The ...
const StoreSession = require ( "mongoose-express-sessions" ) ( session ) mongoose . connect ( ) app . use ( session ( { secret : 's3cr37' , cookie : { maxAge : 1000 * 60 * 60 * 24 * 7 } , store : ...
届会Web服务的常规会话模块特征异步/等待简单的自定义存储将值存储在基于serde_json的例子sessions = { version = " 0.1 " , features = [ " memory " ] } use std :: sync :: Arc;use sessions :: * ;let config = ...
weekly_sessions:每周会话中使用的文件
会话 用于会话管理的Gin中间件,具有多后端支持:用法开始使用它下载并安装: $ go get github.com/gin-contrib/sessions 将其导入您的代码中: import "github.com/gin-contrib/sessions"基本范例单节package main...
红鸟Sessions类,用mysql数据库接管原来由文件系统支撑的php session,解决了session兼容性、虚拟主机无法自定义session等问题,内置gc函数,可以按概率触发删除过期session。 在php原始session用法不变的情况下,...
杜松子酒会议 会话中间件。 安装 $ go get github.com/tommy351/gin-sessions 用法 import ( ... "github.com/tommy351/gin-sessions" ) func main (){ g := gin .... session := sessions . Get ( c
会话 Martini中间件/处理程序,用于轻松的会话管理。 用法 package main import ( ... Get ( "/set" , func ( session sessions. Session ) string { session . Set ( "hello" , "world" ) ret
Light Session URL通过极其简单的被解码为-通过这种方式,您可以确保没有与第三方共享数据。浏览器支持扩展是使用WebExtensions API构建的,因此所有边缘浏览器都应支持该扩展。 我已经测试过: Chrome43 的Firefox...
Breakout-sessions:将存储突破会话的地方!
Connect.createServer( sessions({secret: '123abc'}), function(req, res, next){ req.session = {'hello':'world'}; res.writeHead(200, {'Content-Type':'text/plain'}); res.end('session data updated'); })....
系统还将一些统计信息提供到/ sys / kernel / session-module目录中,用户可以在其中: *See the number of total open sessions*See the number of sessions per-process and per-file*See and change the path ...
log-sessions-2021-08-21-041328.session
django-redis-sessions:用于将会话存储在Redis数据库中的Django的会话后端
会话练习 介绍 会话重建,也称为会话化,是一种在 Web 分析中用于将用户事件划分为会话的技术,目的是了解用户行为并计算会话长度或... IP_ADDRESS,SESSION_START,SESSION_END 在哪里: IP_ADDRESS是客户端的 IP 地
如果在ubuntu/Debian下, 采用apt安装的PHP, 那么在使用Session的时候, 就可能会有小概率遇到这个提示. 复制代码 代码如下: PHP Notice: session_start(): ps_files_cleanup_dir: opendir(/var/lib/php5) failed: ...
django-user-sessions:使用外键将Django会话扩展回用户,从而允许枚举所有用户的会话
Load-SQL-Saturday-Sessions:用于获取SQL Saturday数据并将其加载到SQL实例的脚本
OSC19-Linux-Workshop-Sessions:所有以.md和.pdf格式的OSC'19研讨会。