我有用户会话供用户登录。问题是任何人都可以直接打开服务器端链接。
例如:http://mylink.com/foldername/json/json_example.php
如果有人浏览上面的链接,它会直接打开。所以我想通过使用sessions来保证数据库操作(通过JSON的一些商店)和我的服务器端PHP文件。我需要在执行数据库操作之前检查用户会话在打开服务器端的每个页面之前。
以下用于用户会话的代码:
<?php
ob_start();
session_start();
if(isset($_SESSION['user'])){
header('Location: home.php');}
?>
<html>
<head>
<body>
<section class="container">
<div class="login">
<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<p><input type="text" name="username" placeholder="Username" id="username"></p>
<p><input type="password" name="password" placeholder="Password" id="password"></p>
<p class="submit"><input type="submit" name="login" value="Login"></p>
</form>
</div>
<?php
if(isset($_POST['login'])) {
require_once('db/connection.php');
$username=$_POST['username'];
$password=md5(mysql_real_escape_string($_POST['password']));
$query=mysql_query("select * from tablename where username='$username' and password='$password'");
$row=mysql_num_rows($query);
if ($row == 1){
session_start();
$a=mysql_fetch_array($query);
$_SESSION['user']=$a['username'];
$_SESSION['pref']=$a['preference'];
header("location: home.php");
} else {
echo "wrong username/password";
}
}
?>
</section>
请帮助解决问题。
谢谢。
答案 0 :(得分:0)
这是你期待的事吗?
if(!isset($_SESSION['user'])){
header('Location: login.php');}
请注意isset开头的!
。这意味着如果未在会话中设置用户变量,则会将其重定向到login.php
。
答案 1 :(得分:0)
阻止访问其他文件中包含的文件,不应直接访问:将其添加到直接访问的页面,如index.php:
//This will prevent loading the included scripts as stand alone scritps.
define('SECURE', true);
这是您不希望任何人直接访问的脚本
//Security check
!defined('SECURE') and exit("You should not be here.<br>Go back to the <a href='index.php'>home</a> page.");
要阻止对未登录用户的任何类型文件的访问,请添加:
if (!isset($_SESSION['user']))
exit("You should not be here.<br>Go back to the <a href='index.php'>home</a> page.");