PHP在同一域名下两个不同的项目做独立登录机制详解


Posted in PHP onSeptember 22, 2017

前言

目前有这样一个需求,在一个域名下 如:http://example.com 下,有两个项目,example.com/a/,example.com/b/,这两个项目是相互独立的程序,有不同的会员登录机制,但是我们知道,在同一个域名下,它的 session 会话是共享的,也就是你在a站登录后,b站也会出现你在a站的session信息,因为默认的 session_id 名字是 PHPSESSID,即当你第一访问a项目时,它会自动生成一个名为 PHPSESSID 的session_id,并在服务器端创建一个以session_id 命名的文件,然后发送session_id到浏览器的cookie里保存,当下一次访问时,则会携带该 cookie 信息,服务器端拿到session_id,然后再继续会话。这样就会出现会话信息共享的局面,应该怎样独立出两个不同的会话信息呢?

一、定义session_name

其实很简单的,只需在b项目的初始化文件中使用session时,修改下 session_name 就可以了。

example.com/a/init.php

session_start();
// ...

example.com/b/init.php

// session_id('123456'); // 可以自定义session_id,默认是系统自己生成的

session_name('EBCP_SID'); // session_name 必须定义在session_start() 前

session_start();
// ...

二、测试

example.com/a/test.php

<?php

// a项目测试页面

define("IN_EB", true);
include_once("./init.php");

if($_SESSION['nickname'])
{
 //
 dump("session 页面- 欢迎你继续回来 {$_SESSION['nickname']} " . date("Y-m-d H:i:s"));
}
else
{
 $_SESSION['nickname'] = "Corwien";
 dump("session 页面- 你是第一次登录 {$_SESSION['nickname']} " . date("Y-m-d H:i:s"));
}

输出结果:

session 页面- 欢迎你继续回来 Corwien 2017-09-22 07:49:15

a项目的浏览器cookie:

PHP在同一域名下两个不同的项目做独立登录机制详解

example.com/b/test.php

<?php

// b项目测试页面

define("IN_EB", true);
include_once("./init.php");

if($_SESSION['nickname'])
{
 //
 dump("session_v2 页面- 欢迎你继续回来 {$_SESSION['nickname']} " . date("Y-m-d H:i:s"));
}
else
{
 $_SESSION['nickname'] = "JackMa";
 dump("session_v2 页面- 你是第一次登录 {$_SESSION['nickname']} " . date("Y-m-d H:i:s"));
}

输出结果:

session_v2 页面- 欢迎你继续回来 JackMa 2017-09-22 07:49:15

b项目的浏览器cookie:

PHP在同一域名下两个不同的项目做独立登录机制详解

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
用PHP和ACCESS写聊天室(二)
Oct 09 PHP
来自PHP.NET的入门教程
Oct 09 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
PHP自动生成表单代码分享
Jun 19 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
php array_keys 返回数组的键名
Oct 25 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 #PHP
Laravel中Facade的加载过程与原理详解
Sep 22 #PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 #PHP
深入理解PHP的远程多会话调试
Sep 21 #PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 #PHP
简单实现php上传文件功能
Sep 21 #PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 #PHP
You might like
php上传图片存入数据库示例分享
2014/03/11 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
ucenter通信原理分析
2015/01/09 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
javascript制作2048游戏
2015/03/30 Javascript
DOM 高级编程
2015/05/06 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
js运动应用实例解析
2015/12/28 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
Python set常用操作函数集锦
2017/11/15 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
python中的测试框架
2020/11/13 Python
解决python3输入的坑——input()
2020/12/05 Python
几个人围成一圈的问题
2013/09/26 面试题
2015年英语教研组工作总结
2015/05/23 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
MySQL分区以及建索引的方法总结
2022/04/13 MySQL
Golang实现可重入锁的示例代码
2022/05/25 Golang