Я сделал простую функцию входа в PHP. Моя проблема заключается в том, что нет атрибутов сеанса, когда браузер набирает страницу login_success.php
После того, как я храню данные в сеансе в checklogin.php , я проверил, содержал ли он какие-либо данные, набрав: print_r ($ _ SESSION); , это печатает 2 объекта. Однако, когда я пытаюсь сделать то же самое в login_success.php , он становится пустым.
Я использую xampp и сафари.
login.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Login</title> </head> <form name="form1" method="post" action="checklogin.php"> <input name="tb_username" type="text"/> <input name="tb_password" type="password" /> <input type="submit" name="Submit" value="Login"> </form> <body> </body> </html>
checklogin.php
<?php $host="localhost"; // Host name $username="root"; // Mysql username $password=""; // Mysql password $db_name="test"; // Database name $tbl_name="user"; // Table name // Connect to server and select database. mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB"); // username and password sent from form $myusername=$_POST['tb_username']; $mypassword=$_POST['tb_password']; // To protect MySQL injection $myusername = stripslashes($myusername); $mypassword = stripslashes($mypassword); $myusername = mysql_real_escape_string($myusername); $mypassword = mysql_real_escape_string($mypassword); $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; $result=mysql_query($sql); // Mysql_num_row is counting table row $count=mysql_num_rows($result); // If result matched $myusername and $mypassword, table row must be 1 row if($count==1){ // Register $myusername, $mypassword and redirect to file "login_success.php" $_SESSION['myusername']= "myusername"; $_SESSION['mypassword']= "mypassword"; //print_r($_SESSION); header("location:login_success.php"); } else { echo "Wrong Username or Password"; } ?>
login_success.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <?php session_start(); ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Untitled Document</title> </head> <?php print_r($_SESSION); ?> <body> </body> </html>
Согласно документации php: session_start
session_start () создает сеанс или возобновляет текущий на основе идентификатора сеанса, переданного через запрос GET или POST, или передается через файл cookie.
Поэтому добавьте session_start()
в начало страницы checklogin.php.
Просто используйте <?php session_start() ?>
Вверху страницы.
Настройте свой php.ini
следующим образом:
session.auto_start = 1;
Или выполните следующую команду на первой строке:
ini_set('session.auto_start', 1);
Помимо использования session_start()
, может быть и несколько других причин:
df -h
).