我在PHP中创建了一个简单的登录功能。 我的问题是当浏览器点击页面时没有会话属性 login_success.php
在我在 checklogin.php 的会话中存储数据后,我通过输入以下内容检查它是否包含任何数据:print_r($ _ SESSION); ,这打印2个对象。但是,当我尝试在 login_success.php 中执行相同操作时,它会显示为空。
我使用xampp和safari。
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>
答案 0 :(得分:0)
根据php文档:session_start
session_start()根据通过GET或POST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递。
因此,请将session_start()
添加到checklogin.php页面的顶部。
答案 1 :(得分:0)
只需在页面顶部使用<?php session_start() ?>
。
答案 2 :(得分:0)
像这样配置php.ini
:
session.auto_start = 1;
或者在第一行执行以下命令:
ini_set('session.auto_start', 1);
答案 3 :(得分:0)
除了使用session_start()
之外,还有其他几个原因:
df -h
)。