count($ _ SESSION)始终返回0

时间:2014-10-27 14:51:50

标签: php session

我写了这个剧本:

<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/stile.css"> 
</head>
<body>

<?php
include_once("../../classi/funzioni.php");
include_once("../../classi/config.php");
include_once("../../classi/auth.lib.php");

session_start(); //Inizio la sessione

list($status, $user) = auth_get_status();

if($status == AUTH_LOGGED && $user['nome_negozio']=="Black Fashion"){

echo "<h1>ORDINE DA CLIENTE</h1>";

$prodotto="SELECT * FROM elenco_movimenti WHERE cliente='".$user['nome_negozio']."'";//query
echo "<br><b>QUERY</b><br>";    
echo $prodotto; 

$prodotto=$db_magazzino->query($prodotto);
$prodotto=$prodotto->fetch_row(); 

$i=count($_SESSION);    
$_SESSION[$i]=$prodotto; 
}

?>

<form name="form1" method="post" action="./ordine_da_cliente.php">
<label for="barcode"><b>Codice a barre</b></label>
<input type="text" name="barcode" >
<input type="submit" name="submit" value="OK">
</form>

</body>
</html> 

NB

$i=count($_SESSION); $_SESSION[$i]=$prodotto;

然后如果会话有0个元素,我将产品设置为$ _SESSION [0],我用var_dump看到它:

VAR DUMP SESSION array(1) { [0]=> array(14) { [0]=> string(1) "0" [1]=> string(19) "2014-10-12 08:31:18" [2]=> string(18) "Carico da articoli" [3]=> string(13) "0913VLA002001" ETC...

但下一个计数总是为零,我看到相同的vardump ......

为什么我看不到$ _SESSION [0] [0] [1] [2]。 $ _SESSION [1] [0] [1] [2],等等?

2 个答案:

答案 0 :(得分:1)

你的问题是:

<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/stile.css"> 
</head>
<body>

<?php
include_once("../../classi/funzioni.php");
include_once("../../classi/config.php");
include_once("../../classi/auth.lib.php");

session_start(); //Inizio la sessione

通过在<html><?php之间发送所有内容,您have already sent headers to the browser,因此浏览器不会在页面之间存储会话变量。因此,每次页面加载之间的每个用户每次都会有一个空的$_SESSION,因为浏览器没有从您的服务器存储会话ID,但仍然会在即时脚本中存储$_SESSION个变量执行就像你只使用任何其他变量一样。

任何浏览器输出之前,将代码更改为使用session_start

<?php
session_start(); //Inizio la sessione

include_once("../../classi/funzioni.php");
include_once("../../classi/config.php");
include_once("../../classi/auth.lib.php");

?><html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/stile.css"> 
</head>
<body>
<?php
    // .. Rest of your code

你知道,if you read the docs fully,它说:

  

注意:   要使用基于cookie的会话,必须在向浏览器输出任何内容之前调用session_start()。

答案 1 :(得分:0)

我发现了错误:

如果我删除以下行:

include_once("../../classi/funzioni.php");    
include_once("../../classi/config.php");    
include_once("../../classi/auth.lib.php");    

页面config.php包含以下行:     error_reporting(E_ALL & ~E_NOTICE); //0 E_ALL

然后我看到这个通知: Notice: Unknown: Skipping numeric key 1 in Unknown on line 0

然后我写这个:     $_SESSION['ordine_'.'1']="Ciao come stai?";

它会保存会话。我不太喜欢这种方法,但现在它有效。

无论如何,谢谢你的支持。

亲切的问候。