這篇文章主要為大家介紹了關於PHP在同一網域下兩個不同的項目如何做獨立登入機制的相關資料,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作有一定的參考學習價值,需要的朋友們下面來一起看看吧。
前言
目前有這樣一個需求,在一個網域下如: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:
#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中文網其他相關文章!