文档章节

session和cookie的跨域问题

phpskill
 phpskill
发布于 2014/12/22 12:04
字数 764
阅读 196
收藏 3

    今天开发项目时,遇到一个问题,A网站和B网站都是一个主域名下的二级域名,我在A域名网站下设置了一个SESSION,然后在B域名网站下我想取得这个SESSION。A域名下的示意代码如下:

session_start();
$arr = array("username"=>tltl,"password"=>"prcedu");
$_SESSION["pub_user_info"] = $arr;
B域名下的 示意代码如下:
session_start();
echo $username = $_SEESION["pub_user_info"]["username"]."
";

echo $password= $_SEESION["pub_user_info"]["password"]."
;
意向不到的结果出现了,B代码输出结果竟然没有。

于是以为是哪里出错了,或者有地方清除了所有的SESSION,经过来回仔细检查发现的确没有这些问题。

后来想到了是不是会话跨域问题,百度了下,果然存在会话跨域的存在。


Session主要分两部分:

一个是Session数据,该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在
另一个是标志着Session数据的Session Id,Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保 Session 的安全。

一般如果没有设置 Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,重新注册一个 session ID。如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。


    两个不同的域名网站,想用同一个Session,就是牵扯到Session跨域问题!
    默认情况下,各个服务器会各自分别对同一个客户端产生 SESSIONID,如对于同一个用户浏览器,A 服务器产生的 SESSION ID 是 11111111111,而B 服务器生成的则是222222。另外,PHP 的 SESSION数据都是分别保存在本服务器的文件系统中。想要共享 SESSION 数据,那就必须实现两个目标:


一个是各个服务器对同一个客户端产生的SESSION ID 必须相同,并且可通过同一个 COOKIE 进行传递,也就是说各个服务器必须可以读取同一个名为 PHPSESSID 的COOKIE;另一个是 SESSION 数据的存储方式/位置必须保证各个服务器都能够访问到。这两个目标简单地说就是多服务器(A、B服务器)共享客户端的 SESSION ID,同时还必须共享服务器端的 SESSION 数据。

解决方法: 1.php中设置
ini_set('session.cookie_path', '/');

ini_set('session.cookie_domain', '.mydomain.com');

ini_set('session.cookie_lifetime', '1800');
2.在php.ini里设置
session.cookie_path = /
session.cookie_domain = .mydomain.com
session.cookie_lifetime = 1800
同理,COOKIE也存在跨域的问题,解决方法如下:
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
第五个参数就是关键:$domain
setcookie("username","tltl",time()+60,"/",".xuedao99.com");

setcookie("password","prcedul",time()+60,"/",".xuedao99.com");



这样会话的跨域问题就解决了。

本文转载自:http://www.phpskill.com/html/show-1-613-1.html

共有 人打赏支持
phpskill
粉丝 1
博文 1
码字总数 0
作品 0
朝阳
私信 提问
完全跨域单点登录解决方案[php+redis+p3p协议]

技术要点:COOKIE跨域 + SESSION共享 cookie跨域:让不同域下的session cookie有着同样的session id session共享:同一会话系统,客户端不同域下的session id相同故可访问相同的会话状态 完全...

big_cat
2015/11/11
0
0
前后端分离 | 关于登录状态那些事

背景 登录是一个网站最基础的功能。有人说它很简单,其实不然,登录逻辑很简单,但涉及知识点比较多,如: 密码加密、cookie、session、token、JWT等。 我们看一下传统的做法,前后端统一在一...

小忽悠
2018/10/12
0
0
基于 Cookie 的 SSO 中间件 - kisso

kisso = cookie sso 基于 Cookie 的 SSO 中间件,它是一把快速开发 java Web 登录系统(SSO)的瑞士军刀。欢迎大家使用 kisso !! kisso 帮助文档下载 1、支持单点登录 2、支持登录Cookie缓存...

青苗
2014/06/18
0
21
kisso 3.5 发布,最快最省心的 SSO 构建中间件。

kisso = cookie sso 基于 Cookie 的 SSO 中间件,它是一把快速开发 java Web 登录系统(SSO)的瑞士军刀。引用 @JFinal詹波的一句话:"为您节约更多时间,去陪恋人、家人和朋友 :) "。 首先感...

青苗
2015/12/25
7K
9
PHP单点登录

之前回答过同样的问题,我重新拿出来再回答一遍。题主请看 首先提醒一下题主不要被新技术吓到了,也不要去查什么SSO(Single Sign On,单点登录),那样只能增大你问题的复杂度和对这个问题的...

蜗牛奔跑
2016/11/20
50
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot项目如何访问jsp页面

1.添加pom依赖 首先在原来的pom文件基础上加上这两个配置 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:7877071...

编程SHA
26分钟前
3
0
nginx反向代理配置去除前缀

使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。设置proxy_pass请求只会替换域名,如果要根据不同的url后缀来访问不同的服务,则需要通过如下方法: 方法一:...

架构师springboot
59分钟前
5
0
QianBill API 开发笔记

JWT

BeanHo
今天
5
0
Elasticsearch实战篇——Spring Boot整合ElasticSearch

当前Spring Boot很是流行,包括我自己,也是在用Spring Boot集成其他框架进行项目开发,所以这一节,我们一起来探讨Spring Boot整合ElasticSearch的问题。 本文主要讲以下内容: 第一部分,通...

JAVA_冯文议
今天
4
0
不错的linux下通用的java程序启动脚本

#!/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7...

sprouting
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部