PHP中的會話控制 單點登入

2021-08-21 08:08:20 字數 3321 閱讀 2582

1、簡單使用下session

在使用session之前需要session_start()開啟session

寫乙個demo來實現下

新建乙個session.php

<?php

session_start(); //使用時必須開啟,如果你在php.ini裡頭修改了配置那麼就無需在開啟session了

$_session['username'] = 'admin'; //儲存session資訊為鍵為username值為admin的一對資料

?>

再新建乙個getsession.php我們來取一下值

<?php

session_start(); //使用時必須開啟,如果你在php.ini裡頭修改了配置那麼就無需在開啟session了

echo $_session['username']; //取出在session裡存的username的值

?>

不同瀏覽器取到的值是不同的,原因是因為它們的sessionid不同,舉個栗子:

我用google瀏覽器訪問session.php然後生成了乙個session,那麼我用同一瀏覽器訪問getsession.php的話是可以取到值的,當我用firefox瀏覽器再次訪問session.php的時候又重新生成了乙個session,再次訪問getsession.php也是可以取到值的,但是你會發現取到的不是同乙個值,因為它們是兩個瀏覽器有不同的sessionid,如果你把firefox的sessionid拿過來把google的sessionid進行修改,那麼你會發現它們兩個的值是一樣的,因為session取值只認sessionid。

童鞋們可以試著操作一下,看是不是這個樣子的。

2、跨域

如果我們在自己的apache/nginx伺服器上配置自己的虛擬主機。

我的是apache伺服器,nginx也是修改配置檔案----vhost.conf。

documentroot "h:\myphp_www\phptutorial\www\sessoin"

servername www.test.com

serveralias

options followsymlinks execcgi

allowoverride all

order allow,deny

allow from all

require all granted

乙個虛擬網域名稱為www.test.com的虛擬主機就搭建好了,切記一定要重啟apache/nginx,否則配置不生效。

我們現在要做的就是要把兩個網域名稱下的sessionid保持一致,例如:www.test.com和localhost,前提是在一伺服器下。

下面我們來寫乙個demo實現一下(先不考慮安全和效能)

建立乙個user.php我們要把當前localhost下的sessionid傳到www.test.com

<?php

session_start(); //一定要先開啟session

$sid = session_id(); //獲取到當前的sessionid

?>

">跳轉

直接頁面上的跳轉的話是會出錯的,因為我們只傳輸了,getsession.php並沒有接收,所以我們要修改getsession.php檔案

<?php

if (isset($_get['sid']))

session_start();

echo $_session['username'];

?>

這樣我們就根據sessionid的一致性解決了兩個網域名稱之間的跨域問題

3、實現單點登入----意為在localhost下登入後在www.test.com下同步登陸-----跨域請求

使用ajax的話是不能實現跨域請求的,需要使用jsonp來進行跨域

在session資料夾同級目錄下建立乙個local檔案來更好的區分兩個域

我們現在要實現的就是讓localhost和www.test.com進行互通-----前提是在乙個伺服器上

在session下建立乙個api.php

<?php

?>

在local下建立乙個index.html

在訪問local下index.html的時候它會發起兩個請求

因為裡頭的js**請求了一下www.test.com/api.php

修改session下的getsession.php檔案為以下內容:

<?php

session_start();

if(isset($_session['uid'])) else

?>

複製乙份session下的getsession.php到local下

在local下建立乙個login.php檔案

<?php

session_start();

$_session['uid'] = 18; //儲存session資料鍵為uid值為18的一對資料

?>

當我們訪問login.php後在訪問當前目錄下的getsession.php檔案,結果為:使用者已登入,id是18.

那麼我們現在要做到的就是在localhost下訪問login.php進行登入的時候悄悄的也讓www.test.com進行登入

修改local下login.php檔案為以下**:

<?php

session_start();

$_session['uid'] = 18; //儲存session資料鍵為uid值為18的一對資料

$uid = $_session['uid'];

?>

訪問localhost/local/login.php來進行同步登陸,然後在訪問localhost/local/getsession.php已經是登入狀態了

現在直接訪問www.test.com/getsession.php檔案是不會發生任何改變的,因為我們並沒有接收session,所以要修改session下api.php檔案為以下**:

<?php

session_start();

$uid = $_get['uid'];

$_session['uid'] = $uid;

?>

這樣的話在訪問www.test.com/getsession.php的時候也會同樣提示已登入

這樣我們就使用了jsonp實現了跨域請求,在登入乙個**的情況下另乙個**同步登陸

PHP中的會話控制(2)

例 va lue som ethi ngfr omso mewh ere set cook ie test cook ie value setcookie testcookie va lue,time 3600 1小 時過期 set cook ie test cook ie value,time 3...

PHP中的會話控制(一) cookie

什麼是會話控制 會話控制是一種面向連線的可靠通訊方式,通常根據會話控制判斷使用者登入的行為。會話控制的思想就是允許伺服器跟蹤同乙個客戶端做出的連續請求。會話控制可以記錄客戶登入行為,所以不必每瀏覽乙個頁面都去重複登入。對於同乙個使用者的請求還可以在多個頁面之間為其共享資料。兩種會話控制方式 cook...

php的sso單點登入實現方法

這裡詳細講到了幾點 1 點選登入跳轉到sso登入頁面並帶上當前應用的callback位址 2 登入成功後生成cookie並將cookie傳給callback位址 3 callback位址接收sso的cookie並設定在當前域下再跳回到應用1即完成登入 4 再在應用程式需要登入的地方嵌入乙個ifram...