2011-09-29 87 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