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服務器上配置自己的html' target='_blank'>虛擬主機。
我的是Apache服務器,nginx也是修改配置文件----vhost.conf。
VirtualHost *:80 DocumentRoot H:/myphp_www/PHPTutorial/WWW/sessoin ServerName www.test.com ServerAlias Directory H:/myphp_www/PHPTutorial/WWW/sessoin Options FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted /Directory /VirtualHost
一個虛擬域名為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 a href= http://www.test.com/getsession.php?sid= ?php echo $sid;? 跳轉 /a
直接頁面上的跳轉的話是會出錯的,因為我們只傳輸了,getsession.php并沒有接收,所以我們要修改getsession.php文件
?php if (isset($_GET[ sid ])){ //setcookie( 名字 , 值 , 有效期 , 域名 $sid = $_GET[ sid //setcookie( PHPSESSID , $sid); //設置sessionID //或者我們還可以用另一種方式 session_id($sid); //開啟session之前 指定一個sessionid 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
script src= www.test.com/api.php /script !-- JS代碼在瀏覽器端執行 --
在訪問local下index.html的時候它會發起兩個請求 因為里頭的js代碼請求了一下www.test.com/api.php
修改session下的getsession.php文件為以下內容:
?php session_start(); if(isset($_SESSION[ uid ])){ echo 用戶已登錄,id是 .$_SESSION[ uid } else { echo 沒有登錄 ?
復制一份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 script src= www.test.com/api.php?uid= ?php echo $uid;? /script
訪問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 !
相關推薦:
對于PHP中信息加密技術的介紹
如何解決php在foreach循環后留下的數組引用問題
如何解決vue+mui中mui-silder插件失效了不能拖拽的問題
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答