Как перебрать сессионный массив в php - PullRequest
4 голосов
/ 23 марта 2011

Я пытаюсь перебрать сеанс.Но я не могу получить ожидаемые результаты.Я все еще пытаюсь исследовать вещи.Поэтому, пожалуйста, научите меня, как лучше это сделать.Если вы найдете мой код небезопасным или неуместным.Сначала у меня есть такая форма входа:

<form name="x" action="login.php" method="post">

Username:<input type="text" name="uname" value=""></input><br/>
Password:<input type="password" name="pword" value=""></input>
<input type="submit" value="login"></input>
</form>

А вот login.php, который устанавливает сеанс, если запись найдена в базе данных mysql:

<?php
require_once("conn.php");

$username=$_POST['uname'];
$pword=md5($_POST['pword']);

echo $username."<br/>";
echo $pword;

$check=mysql_query("SELECT * FROM users WHERE Uname='$username' AND Hpword='$pword'");

if(mysql_num_rows($check)==0){
    header('Location:loginform.php');
}else{

    session_start();

    while($result=mysql_fetch_assoc($check)){
        $_SESSION['uid'].=$result['ID'];
        $_SESSION['uname'].=$result['Uname'];


    }

}
?>

А вот файл, который зацикливаетсячерез сеанс:

<?php

session_start();
echo "Logged in users:<br/>";


foreach($_SESSION as $sir){


}

echo "User id: ". $_SESSION['uid']."<br/>";
echo "Username: ".$_SESSION['uname']."<br/>";

?>

Я получаю это:

enter image description here

Пока я ожидаю получить что-то вроде этого:

Пользовательid: 1 Имя пользователя: yoh

Идентификатор пользователя: 2 Имя пользователя: max

Ответы [ 5 ]

7 голосов
/ 23 марта 2011

$ _ СЕССИЯ доступна только для посетителя, который фактически открывает страницу. (Было бы неплохо увидеть все переменные $ _SESSION, не так ли?)

Возможно, вы захотите сохранить эти переменные $ _SESSION в вашей базе данных, а затем перебрать их.

Обновление:

  • создать таблицу сессий, в которой вы можете хранить своих зарегистрированных пользователей
  • каждый раз, когда вошедший в систему пользователь открывает страницу, увеличивайте значение (отметку времени), например last_seen
  • одновременно проверяет мертвые сеансы (например, удаляет все строки, где значение last_seen меньше now - время жизни сеанса сервера
3 голосов
/ 23 марта 2011

Помимо очень правильного ответа Фабрика, всего несколько строк в вашем коде:

foreach($_SESSION as $sir){

}

этот цикл, очевидно, ничего не делает. Вы не можете получить вывод из кода, который ничего не выводит:)

Также, если вы хотите сохранить несколько значений в сеансе, как в корзине покупок, вы должны хранить в массиве, а не в длинной объединенной строке:

    $_SESSION['cart'][] =$result;

создаст массив с именем $ _SESSION ['cart'], который можно повторять так, как вам нужно:

foreach ($_SESSION['cart'] as $result){
  echo "Item id: ".$result['id'].", name: ".$result['name']."<br>\n";
}
1 голос
/ 19 июня 2012
session_start();
foreach ($_SESSION as $name => $value)
{
    echo $name."=".$value."<br>";
}
0 голосов
/ 23 марта 2011

ОБНОВЛЕНИЕ : не числовой индекс.

В логине.иметь только одну запись для каждого пользователя.

0 голосов
/ 23 марта 2011

почему бы не хранить его как

$ _ SESSION [$ uid] = $ name; или $ _SESSION [] = array ('uid' => $ uid, 'name' => $ name);

тогда вы можете просто перебрать все записи ..

foreach($_SESSION as $uid=> $name){
   ....
}

или

foreach($_SESSION as $userArray){
    $uid = $userArray['uid']; 
    $name = $userArray['name']; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...