php獲取session的值
① php 取不出session值,是空的
你這里已經保存成功session了,列印也沒問題 你這個是想輸出session吧: echo"獲取session<br/>"; 輸出的話需要拼接 你這樣不行 echo "獲取".$_SESSION['name']."<br/>";這樣就能輸出你保存的session了
② php中怎麼取得session裡面的值
1、在php中include和require內的內容是否運行,要看你在所包含的文件裡面的代碼。如果你包含的是函數,那麼當然要等到你調用才會運行,如果你包含的是語句,那麼相當於是把這段語句加入到當前的位置2、include和require的區別是,一個會出現應用級別的報警,include文件不存在,不會引起報錯(但是有報警),而require會引起報錯,你試一下引用不存在的文件就知道了3、增加once,那麼就是說只包含一次,如果該文件已經被包含了,那麼就不會再次包含,你可以設計一個包含文件,直接讓其echo數據,然後運行看看,比如<?phpecho $f?>這是一個文件然後你再另外一個頁面使用:<?php$f=1include ("xxx.php")$f=2include ("xxx.php")?>來看自己動動手也可以去後盾人學習,看看教學視頻就學會了,沒毛病
③ php怎麼獲取session的值
原生的php獲取session,必須開啟session_start();如下
<?php
session_start();
print_r($_SESSION);
?>
當然在php框架中都有自己的獲取方式,有的甚至不用php原生的session,比如laravel框架
④ 關於PHP中SESSION取值的問題
在PHP中使用過SESSION的朋友可能會碰到這么一個問題,SESSION變數不能跨頁傳遞。這令我苦惱了好些日子,最終通過查資料思考並解決了這個問題。我認為,出現這個問題的原因有以下幾點:
1、客戶端禁用了cookie
2、瀏覽器出現問題,暫時無法存取cookie
3、php.ini中的session.use_trans_sid = 0或者編譯時沒有打開--enable-trans-sid選項
為什麼會這樣呢?下面我解釋一下:
Session儲存於伺服器端(默認以文件方式存儲session),根據客戶端提供的session id來得到用戶的文件,取得變數的值,session id可以使用客戶端的Cookie或者Http1.1協議的Query_String(就是訪問的URL的「?」後面的部分)來傳送給伺服器,然後伺服器讀取Session的目錄……。也就是說,session id是取得存儲在服務上的session變數的身份證。當代碼session_start();運行的時候,就在伺服器上產生了一個session文件,隨之也產生了與之唯一對應的一個session id,定義session變數以一定形式存儲在剛才產生的session文件中。通過session id,可以取出定義的變數。跨頁後,為了使用session,你必須又執行session_start();將又會產生一個session文件,與之對應產生相應的session id,用這個session id是取不出前面提到的第一個session文件中的變數的,因為這個session id不是打開它的「鑰匙」。如果在session_start();之前加代碼session_id($session id);將不產生新的session文件,直接讀取與這個id對應的session文件。
PHP中的session在默認情況下是使用客戶端的Cookie來保存session id的,所以當客戶端的cookie出現問題的時候就會影響session了。必須注意的是:session不一定必須依賴cookie,這也是session相比cookie的高明之處。當客戶端的Cookie被禁用或出現問題時,PHP會自動把session id附著在URL中,這樣再通過session id就能跨頁使用session變數了。但這種附著也是有一定條件的,即「php.ini中的session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項」。
明白了以上的道理,現在我們來拋開cookie使用session,主要途徑有三條:
1、設置php.ini中的session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項,讓PHP自動跨頁傳遞session id。
2、手動通過URL傳值、隱藏表單傳遞session id。
3、用文件、資料庫等形式保存session_id,在跨頁過程中手動調用。
通過例子來說明吧:
s1.php
<?php
session_start();
$_SESSION['var1']="中華人民共和國";
$url="<ahref=".""s2.php">下一頁</a>";
echo$url;
?>
s2.php
<?php
session_start();
echo"傳遞的session變數var1的值為:".$_SESSION['var1'];
?>
運行以上代碼,在客戶端cookie正常的情況下,應該可以在得到結果「中華人民共和國」。
現在你手動關閉客戶端的cookie,再運行,可能得不到結果了吧。如果得不到結果,再「設置php.ini中的session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項」,又得到結果「中華人民共和國」
這也就是上面所說的途徑1。
下面再說途徑2:
修改的代碼如下:
s1.php
<?php
session_start();
$_SESSION['var1']="中華人民共和國";
$sn=session_id();
$url="<ahref=".""s2.php?s=".$sn."">下一頁</a>";
echo$url;
?>
s2.php
<?php
session_id($_GET['s']);
session_start();
echo"傳遞的session變數var1的值為:".$_SESSION['var1'];
?>
辦法3還是通過例子來說明:
login.html
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>Login</title>
<metahttp-equiv="Content-Type"content="text/html;charset=??????">
</head>
<body>
請登錄:
<formname="login"method="post"action="mylogin1.php">
用戶名:<inputtype="text"name="name"><br>
口令:<inputtype="password"name="pass"><br>
<inputtype="submit"value="登錄">
</form>
</body>
</html>
mylogin1.php
<?php
$name=$_POST['name'];
$pass=$_POST['pass'];
if(!$name||!$pass){
echo"用戶名或密碼為空,請<ahref="login.html">重新登錄</a>";
die();
}
if(!($name=="laogong"&&$pass=="123")){
echo"用戶名或密碼不正確,請<ahref="login.html">重新登錄</a>";
die();
}
//注冊用戶
ob_start();
session_start();
$_SESSION['user']=$name;
$psid=session_id();
$fp=fopen("e:\tmp\phpsid.txt","w+");
fwrite($fp,$psid);
fclose($fp);
//身份驗證成功,進行相關操作
echo"已登錄<br>";
echo"<ahref="mylogin2.php">下一頁</a>";
?>
mylogin2.php
<?php
$fp=fopen("e:\tmp\phpsid.txt","r");
$sid=fread($fp,1024);
fclose($fp);
session_id($sid);
session_start();
if(isset($_SESSION['user'])&&$_SESSION['user']="laogong"){
echo"已登錄!";
}
else{
//成功登錄進行相關操作
echo"未登錄,無權訪問";
echo"請<ahref="login.html">登錄</a>後瀏覽";
die();
}
?>
同樣請關閉cookie測試,用戶名:laogong 密碼:123 這是通過文件保存session id的,文件是:e: mpphpsid.txt,請根據自己的系統決定文件名或路徑。
至於用資料庫的方法,我就不舉例子了,與文件的方法類似。
總結一下,上面的方法有一個共同點,就是在前一頁取得session id,然後想辦法傳到下一頁,在下一頁的session_start();代碼之前加代碼session_id(傳過來的session id);
⑤ 請問一下php的session如何用如何接收前一個頁面表單傳過來的值並保存在session中
session 可以直接使用,在開頭先運行session_start(),在程序中他是一個超變數,每次請求都可以調用。直接$_SESSION[「name」] = $value來使用,獲取變數值直接使用$_SESSION[「name」],表單傳遞不需要用session,直接獲取$_POST[「name」],傳過來的值想保存到session,$_SESSION[「name」] = $_POST[「name」];就可以了,如有更多疑問請回復。
⑥ PHP中COOKIE或SESSION值在不同頁面取值不了
在一個頁面設置一個cookie時,必須刷新或到下一個頁面才可以用 $_COOKIE 得到變數的值.原因是因為當頁面第一次被瀏覽器訪問載入時,頁面中的 cookie 會被設置,將其發送存儲到客戶端指定的存儲位置,所以$_COOKIE沒有接收到客戶端發送過來的 cookie 變數的值,當刷新或到下一個頁面時,客戶端會在頁面程序在伺服器端運行之前,發送與該地址相對應的 cookie到伺服器端,所以 $_COOKIE 可以得到的值!
說白了就是當每一個頁面被訪問時,如果客戶端找到了與訪問地址相對應的 cookie 時,會在程序在伺服器端運行之前發送這個 cookie 到伺服器端. (個人對此的看法)本人表達能力不強,如有不明,還請抱歉!php中設置cookie數組的時候,不可以用像php中的那個添加數據的方法:
<?php
setcookie('my_cookie[]', 1);
setcookie('my_cookie[]', 2);
print_r($_COOKIE); // Array ( [my_cookie] => Array ( [0] => 1 ))
// 數組的值添加是添加成功了,不過索引沒有變,後面的數據將前的數據覆蓋了!由此得到
my_cookie[],默認指向數據的第一元素的位置,即索引為0 的位置. 注意與php中的不一樣! 以後用cookie數據記住要指定數組元素索引哦!
$my_cookie[] = 1;
$my_cookie[] = 2;
print_r($my_cookie); //Array ( [0] => 1 [1] => 2)
?>刪除 cookie 變數的兩個方法:
1.php
<?php
setcookie('user_name_1', 'zhaofei299', time()+3600); // 生存期為 1 個小時
setcookie('user_name_2', 'ZHAOFEI299', time()+3600); // 生存期為 1 個小時
?>2.php
<?php
setcookie('user_name_1'); // 第一種
setcookie('user_name_2', "", time()-1); // 第二種
print_r($_COOKIE); // 刷新頁面2下以上會輸出 Array ( [user_name_1] => )/*為什麼超級全局變數 $_COOKIE 中的 user_name_1 沒有被刪除(變數為空並不代表不存在),而user_name_2被刪除了? 那是因為兩個刪除變數的方式不同!
第一種: 是設置了 cookie 的生存期, 只不過是將它的值默認設置為空,生存期為與瀏覽器一樣,瀏覽器關閉時,cookie才會刪除!所以當重新打開一個瀏覽器,輸出地址時,才會發現 cookie 變數全部被刪除了!將2.php 中兩個 setcookie() 函數部分注釋掉看看(重新輸出了地址)!第二種: 也是設置了 cookie 的生存期,是使 cookie 的生存期一定過期, cookie 也就被刪除,所以刷新頁面,客戶端向伺服器端發送 cookie 時, $_COOKIE 並沒有能夠得到該cookie變數的值!
*/
?>會話id默認儲放在客戶端Cookie中!
<?php
session_start();
print_r($_COOKIE);
?>
cookie的設置有兩種方法header('set-cookie:user=zhaofei299');
setcookie('user', 'zhaofei299');會話變數不能被GET數據或POST數據重載!使用session變數傳遞數組,對象時無需序列化!
使用session變數傳遞對象時,在調用session_start()之前,必須包含該對類對象的定義,反序列化(serialize)也是如此!
刪除單個會話變數可以使用unset($_SESSION['***']) 直接刪除!刪除所有的會話變數不可以用unset($_SESSION),因為這樣會將所有的會話信息刪除,包含存儲在COOKIE中的PHPSESSID,也就是破壞了兩個頁面之間的會話聯系,應該使用$_SESSION = array();消除會話id,使頁面之間失去聯系!
session_destroy();
程序清單1.1
<?php
session_start();
header('content-type:text/html;charset=utf-8');
$_SESSION['a'] = 'a';
$_SESSION['b'] = 'b';unset($_SESSION); //測試後,再注釋下看看
$_SESSION['user'] = 'zhaofei299';
echo 'SESSION_ID: '.session_id().'
';
echo '<a href="3.php" target="_blank">測試下</a>';
?>
<?php
session_start();echo $_SESSION['user'];
echo session_id(); //會話變數改變了
?>會話id(session_id)的兩種方式傳遞:
1.cookie
2.url因為默認session是基於cookie的,而cookie又是跟隨http協議發送的,所以與cookie一樣,在session_start()之前不能有任何輸出!現在主要說一說第二種,通過 url 傳遞會話id
php中已經定義SID這個常量來得到 會話的id
sesssin_id 的使用!
<?php
session_start();
echo defined('SID')?'true':'false'; // true
echo SID; //什麼也沒有?
?>
為什麼SID的值會是null 呢?是它哪裡有問題了?
原因是因為 session 默認是基於 cookie 的,而 SID 只有 session_id 通過 url
傳遞數據時才會被賦值!
在瀏覽器中將 cookie 禁用,你就會發現 SID 有了輸出,而不是 null!
刪除session要三步實現.
<?php
session_destroy(); // 第一步: 刪除伺服器端session文件,這使用
setcookie(session_name(),'',time()-3600); // 第二步: 刪除實際的session:
$_SESSION = array(); // 第三步: 刪除$_SESSION全局變數數組
?>大家都知道session變數是保存在伺服器端的,也就是說session的變數會保存在伺服器中一個目錄中,我們可以在php.ini中的session.save_path 那裡可以找到session文件中保存的地址.默認的session的生存期是瀏覽的關閉就結束,但要知道會話過期結束後,當打開頁面session_start()會判斷會話id 是否存在,如果不存在就創建一個,否則將該會話id 的變數載入頁面!因為過期session_id會被創建一個新的,但它保存在伺服器端的session文件並沒有被刪除(關閉瀏覽器,打開session文件保存地看看),所以要用session_destory()函數清除會話id,並同時清除相應的會話文件,這樣的話才能做到最徹底的清除!
session_id 使用 url 傳遞session 變數數據時,因為session_start()開啟會話時會判斷會話id 是否存在,如果不存在就創建一個,否則將該會話id 的變數載入頁面!
而現在是使用url 來傳遞session_id,然而每一次 刷新/進入頁面 都會生成一個會話id,所以頁面之間就不能得到在另一頁面設置過的session_id 的變數,那麼使用 session也就沒什麼意義了!解決方法:在session_start()之前,手動設置頁面的session_id,這樣頁面的就可以得到前一頁中所設置的session變數的,也就實現了會話的傳遞,如下代碼可以說明!
//已禁用 cookie1.php
<?php
session_start();
$_SESSION['user'] = 'zhaofei299';
echo '<a href="2.php?'.SID.'">下一頁</a>';
?>1.php的第4行代碼也可以寫成:echo '<a href="2.php">下一頁</a>';可以設置php.ini 中的 session.use_trans_sid 為1,這樣當使用 url 傳遞會話 id 時,
瀏覽器會自動將 session_id 追加到 url 的後面!
就好像 在瀏覽器中 輸入: www.cn-juking.com 一樣,瀏覽器會自動將其更換成 http://www.cn-juking.com/2.php
<?php
session_id($_GET['PHPSESSID']); // 手動設置session_id,這種就可以使用前一個頁面的session_id 的變數了,也就實現了會話!
session_start();
print_r($_SESSION);
?>常用session函數:bool session_start(void); 初始化session
bool session_destroy(void): 刪除伺服器端session關聯文件。
string session_id() 當前session的id
string session_name() 當前存取的session名稱,也就是客戶端保存session ID的cookie名稱.默認PHPSESSID。
array session_get_cookie_params() 與這個session相關聯的session的細節.
string session_cache_limiter() 控制使用session的頁面的客戶端緩存
ini session_cache_expire() 控制客戶端緩存時間
bool session_destroy() 刪除伺服器端保存session信息的文件
void session_set_cookie_params ( int lifetime [, string path [, string domain [, boolsecure [, bool httponly]]]] )設置與這個session相關聯的session的細節
bool session_set_save_handler ( callback open, callback close, callback read, callbackwrite, callback destroy, callback gc )定義處理session的函數,(不是使用默認的方式)
bool session_regenerate_id([bool delete_old_session]) 分配新的session id
⑦ php session是如何賦值如何查看的
php session賦值,就是通過在在php的頁面中開啟你的session,通過session_start();開啟之後就可以像普通變數那樣賦初值,$_SESSION['admin'] = 'admin',這樣的賦值的,還有一種就是通過html的表單傳值過來,$_SESSION['admin'] = $_POST['admin'],這樣來賦值的,session我們一般都是用在驗證是否已經登錄使用,舉個例子:
<?php
session_start();
if(!isset($_SESSION[$adminconf['admin']]) || $_SESSION[$adminconf['admin']] ==''){
header('Location:'.APP_MAIN.'/stie/admin_login.php'); //跳回到登錄界面
exit();
}
?>