2011-09-29 84 views
0

這裏是代碼讓我發瘋:)Php,會話ID控制不起作用?

<?php 
$deger=0; 
if (session_id() == '') { 
session_start(); 
$deger=1; 
} 
else{ 
$deger=0; 
} 

$row = mysql_fetch_row($result); 
$counter =$row[2]; 

if($deger==1){ 
$counter--; 
} 
echo $counter; 
?> 

這基本代碼讓我發瘋。 deger == 1條件總是返回true,並繼續遞減計數器。我想要做的是檢查會話,如果會話是新的減少它只有一次。之後,不要減少價值。我在這裏錯過了什麼嗎?我是新來的PHP也許我錯過了一些東西。

我期待你的回答謝謝。

回答

1

我認爲你必須打電話session_start();之前任何像if (session_id() == '')這樣的謎團在session_id沒有啓動會話的時候真的什麼都沒有。這個代碼我一慣是爲我工作(可能是不完美):

session_start(); 
$user = (isset($_SESSION['user']) && $_SESSION['user'] != '' ? $_SESSION['user'] : null); 
if ($user == null) { 
//it's a not logged in user 
//checking users credentials and if it's ok 
$_SESSION['user'] = $uid; //or whatever you want to use to identify a user 
} else { 
//it's logged in user 
} 
+0

您能否提供一段示例代碼來檢查用戶是第一次打電話給某個頁面還是舊用戶? – akd

+0

請參閱我的編輯 – k102

+0

非常感謝你,我認爲這是我正在尋找的答案。我發現有點混淆的唯一的事情是,我想用會話標識來識別用戶,就我所知,這是一個唯一的號碼。所以這是可以調用這個$ _SESSION ['user'] = session_id(); – akd

1

總是有一個用戶會話,但並不總是一個php會話。所以,如果你沒有做的session_start(),但,你可以檢查有這樣的事情:

if (isset($_SESSION]['loggedin'])){ 
    $deger = 0; 
} else { 
    $deger = 1; 
    session_start(); 
    $_SESSION['loggedin'] = true; 
} 

無論你在哪裏啓動會話,也填補了$ _SESSION變種。

+0

HM ...'$ _SESSION'是空的,如果會議沒有啓動 – k102

+0

正確的,這就是我想在這裏指出,與isset() –

+0

我複製並粘貼您的代碼,但沒有工作。它不顯示任何東西? – akd