SESSION 页面刷新 失效
生活随笔
收集整理的這篇文章主要介紹了
SESSION 页面刷新 失效
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
PHP中,session不能傳遞到下一個頁面去,一般有兩種情況:
我們先寫個php文件:<?=phpinfo()?>, 傳到服務(wù)器去看看服務(wù)器的參數(shù)配置。
轉(zhuǎn)到session部分,看到session.use_trans_sid參數(shù)被設(shè)為了零。
這 個參數(shù)指定了是否啟用透明SID支持,即session是否隨著URL傳遞。我個人的理解是,一旦這個參數(shù)被設(shè)為0,那么每個URL都會啟一個 session。這樣后面頁面就無法追蹤得到前面一個頁面的session,也就是我們所說的無法傳遞。兩個頁面在服務(wù)器端生成了兩個session文 件,且無關(guān)聯(lián)。(不知道這樣理解對不對?請高手指教。)
所以一個辦法是在配置文件php.ini里把session.use_trans_sid的值改成1。
當然我們知道,不是誰都有權(quán)限去改php的配置的,那么還有什么間接的解決辦法呢?
下面就用兩個實例來說明吧:
文件1 test1.php
<?php
//表明是使用用戶ID為標識的session
session_id(SID);
//啟動session
session_start();
//將session的name賦值為Havi
$_SESSION['name']=”Havi”;
//輸出session,并設(shè)置超鏈接到第二頁test2.php
echo “<a href=\”test2.php\”>”.$_SESSION['name'].”</a>”;
?>
文件2: test2.php
<?php
表明是使用用戶ID為標識的session
session_id(SID);
//啟動session
session_start();
//輸出test1.php中傳遞的session。
echo “This is “.$_SESSION['name'];
?>
每個頁面都要寫開啟session哦。。不然還是不能正常工作
所以,重點是在session_start();前加上session_id(SID);,這樣頁面轉(zhuǎn)換時,服務(wù)器使用的是用戶保存在服務(wù)器session文件夾里的session,解決了傳遞的問題。
不過有同鞋會反映說,這樣一來,多個用戶的session寫在一個SID里了,那Session的價值就發(fā)揮不出來了。所以還有一招來解決此問題,不用加session_id(SID);前提是你對服務(wù)器的php.ini有配置的權(quán)限:
output_buffering改成ON,道理就不表了。
第二個可能的原因是對服務(wù)器保存session的文件夾沒有讀取的權(quán)限,還是回到phpinfo.php中,查看session保存的地址:
session.save_path: var/tmp
所以就是檢查下var/tmp文件夾是否可寫。
寫一個文件:test3.php來測試一下:
<?
echo var_dump(is_writeable(ini_get(“session.save_path”)));
?>
如果返回bool(false),證明文件夾寫權(quán)限被限制了,那就換個文件夾咯,在你編寫的網(wǎng)頁里加入:
//設(shè)置當前目錄下session子文件夾為session保存路徑。
$sessSavePath = dirname(__FILE__).’/session/’;
//如果新路徑可讀可寫(可通過FTP上變更文件夾屬性為777實現(xiàn)),則讓該路徑生效。
if(is_writeable($sessSavePath) && is_readable($sessSavePath))
{session_save_path($sessSavePath);}
第一次些cms遇到這樣的問題,該文來自:http://blog.163.com/lin286679722@126/blog/static/111743825201072753634367/
我們先寫個php文件:<?=phpinfo()?>, 傳到服務(wù)器去看看服務(wù)器的參數(shù)配置。
轉(zhuǎn)到session部分,看到session.use_trans_sid參數(shù)被設(shè)為了零。
這 個參數(shù)指定了是否啟用透明SID支持,即session是否隨著URL傳遞。我個人的理解是,一旦這個參數(shù)被設(shè)為0,那么每個URL都會啟一個 session。這樣后面頁面就無法追蹤得到前面一個頁面的session,也就是我們所說的無法傳遞。兩個頁面在服務(wù)器端生成了兩個session文 件,且無關(guān)聯(lián)。(不知道這樣理解對不對?請高手指教。)
所以一個辦法是在配置文件php.ini里把session.use_trans_sid的值改成1。
當然我們知道,不是誰都有權(quán)限去改php的配置的,那么還有什么間接的解決辦法呢?
下面就用兩個實例來說明吧:
文件1 test1.php
<?php
//表明是使用用戶ID為標識的session
session_id(SID);
//啟動session
session_start();
//將session的name賦值為Havi
$_SESSION['name']=”Havi”;
//輸出session,并設(shè)置超鏈接到第二頁test2.php
echo “<a href=\”test2.php\”>”.$_SESSION['name'].”</a>”;
?>
文件2: test2.php
<?php
表明是使用用戶ID為標識的session
session_id(SID);
//啟動session
session_start();
//輸出test1.php中傳遞的session。
echo “This is “.$_SESSION['name'];
?>
每個頁面都要寫開啟session哦。。不然還是不能正常工作
所以,重點是在session_start();前加上session_id(SID);,這樣頁面轉(zhuǎn)換時,服務(wù)器使用的是用戶保存在服務(wù)器session文件夾里的session,解決了傳遞的問題。
不過有同鞋會反映說,這樣一來,多個用戶的session寫在一個SID里了,那Session的價值就發(fā)揮不出來了。所以還有一招來解決此問題,不用加session_id(SID);前提是你對服務(wù)器的php.ini有配置的權(quán)限:
output_buffering改成ON,道理就不表了。
第二個可能的原因是對服務(wù)器保存session的文件夾沒有讀取的權(quán)限,還是回到phpinfo.php中,查看session保存的地址:
session.save_path: var/tmp
所以就是檢查下var/tmp文件夾是否可寫。
寫一個文件:test3.php來測試一下:
<?
echo var_dump(is_writeable(ini_get(“session.save_path”)));
?>
如果返回bool(false),證明文件夾寫權(quán)限被限制了,那就換個文件夾咯,在你編寫的網(wǎng)頁里加入:
//設(shè)置當前目錄下session子文件夾為session保存路徑。
$sessSavePath = dirname(__FILE__).’/session/’;
//如果新路徑可讀可寫(可通過FTP上變更文件夾屬性為777實現(xiàn)),則讓該路徑生效。
if(is_writeable($sessSavePath) && is_readable($sessSavePath))
{session_save_path($sessSavePath);}
第一次些cms遇到這樣的問題,該文來自:http://blog.163.com/lin286679722@126/blog/static/111743825201072753634367/
總結(jié)
以上是生活随笔為你收集整理的SESSION 页面刷新 失效的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 更新多条id键值相同记录中
- 下一篇: Xshell 更改字体配色