【发布时间】:2015-04-28 21:37:08
【问题描述】:
我有一个密码检查功能,它设置会话变量并重定向到dashboard.php
<?php
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST")
{
// username and password sent from Form
$myusername=$_POST['username'];
$mypassword=$_POST['password'];
if($myusername=="admin" && $mypassword=="admin")
{
$_SESSION['login_user']=$myusername;
header("location: dashboard.php");
}
else
{
echo "Your Login Name or Password is invalid";
}
}
?>
Dashbord.php 像这样检查会话变量
<?php
session_start();
$user_check=$_SESSION['login_user'];
if(!isset($user_check))
{
header("Location: http://www.none.com/dashboard/login.php");
}
?>
在仪表板中,我有几个指向 php 文件的链接,这些文件使用相同的东西来检查会话。
<?php
session_start();
$user_check=$_SESSION['login_user'];
if(!isset($user_check))
{
header("Location: http://www.none.com/dashboard/login.php");
}
?>
但是当我点击仪表板链接时,我会被重定向到登录页面。但是,如果我手动导航到该链接,我可以访问该页面。我尝试使用以下方法清除会话:
<?php
session_start();
unset($_SESSION['login_user']);
echo "Logged out of Dashboard";
?>
并尝试手动进入页面,我被重定向到登录,所以代码没问题。但我需要手动从仪表板导航到工作。我做错了什么。
添加.php
<?php
session_start();
if(!isset($_SESSION['login_user']))
{
header("Location: http://www.none.com/dashboard/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>Add Product Category</title>
<link rel="stylesheet" type="text/css" href="view.css" media="all">
<script type="text/javascript" src="view.js"></script>
<script>
function validateForm() {
var x = document.forms["form_974780"]["productname"].value;
if (x == null || x == "") {
alert("Please Enter New Product Name");
return false;
}
}
</script>
</head
<body id="main_body" >
<?php
if (isset($_POST['submit']))
{
$productname=$_POST['productname'];
//conn goes here
$check=$conn->query("SELECT pname FROM products WHERE pname='$productname'");
$num_rows = mysqli_num_rows($check);
if($num_rows>0)
{
echo "<font color=\"white\">";
echo("Dealer Already exists ".$productname);
echo"</font>";
}
else
{
$result=$conn->query("INSERT INTO products(pname)VALUES('$productname')");
if($result)
{
echo "<font color=\"white\">";
echo("Successfully Inserted ".$productname);
echo"</font>";
}
else
{
echo "<font color=\"red\">";
echo("Error when inserting");
echo"</font>";
}
}
mysqli_close($conn);
}
else
{
}
?>
<img id="top" src="top.png" alt="">
<div id="form_container">
<h1><a>Add Product Category</a></h1>
<form id="form_974780" class="appnitro" method="post" action="?" onsubmit="return validateForm()">
<div class="form_description">
<h2>Add Product Category</h2>
<p></p>
</div>
<ul >
<li id="li_12" >
<label class="description" for="element_12">Existing Product Categories </label>
<div>
<select class="element select large" id="element_12" name="element_12">
<?php
//conn goes here
$result=$conn->query("SELECT pname FROM products");
while ($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
echo "<option value='".$row['pname']."'>".$row['pname']."</option>";
}
mysqli_close($conn);
?>
</select>
</div>
</li> <li id="li_13" >
<label class="description" for="element_13">Add New Category </label>
<div>
<input id="element_13" name="productname" class="element text large" type="text" maxlength="350" value=""/>
</div><p class="guidelines" id="guide_13"><small>Enter the new Product Category to add and Click the Submit Button. </small></p>
</li>
<li class="buttons">
<input type="hidden" name="form_id" value="974780" />
<input id="saveForm" class="button_text" type="submit" name="submit" value="submit"/>
</li>
</ul>
</form>
</div>
<img id="bottom" src="bottom.png" alt="">
</body>
</html>
【问题讨论】:
-
你能把
print_r($_SESSION);exit;放在session_start();之后的Dashbord.php中,让我知道什么是响应 -
@MrJerry 它的打印数组([login_user] => admin).dashboard.php 有效,当我单击其中的链接时问题就开始了
-
您是否在所有页面中都开始了会话?
-
@MrJerry dashboard.php 在会话中有价值,但 add.php 没有。为什么会这样?
-
为什么不能把会话逻辑写在一个普通的文件中,并且可以包含在所有页面中?