我如何阻止非特权用户的部分内容
How i block part of the content for unprivileged users
我正在做一个网站,我想阻止用户在他或她完成一些预定义的目标之前访问内容。
例如,我想阻止用户去我页面的某个地方,直到他们去另一个地方。喜欢阻止没有适当级别的人访问网络的那部分。
我想尽可能避免使用密码。
我将在我网页的几个部分中使用它。
感谢您的帮助。
这是您问题的一个简单示例:
index.php 将用户重定向到 login.php 如果指定的 $_SESSION 变量不存在。
login.php 包含基本的 account/password 形式。 login.php用AJAX调用checkLogin.php检查account/password是否正确。
checkLogin.php 通过将用户输入与数据库中的数据进行比较来检查 account/password 是否正确(mySQL 在这个例子中)。
如果 account/password 正确,checkLogin.php 启动 $_SESSION["account"] 并将用户重定向回来至 index.php.
index.php
<?php
session_set_cookie_params(0);
session_start();
ob_start();
// Redirect to login.php if $_SESSION["account"] is not set
$url = "login.php";
if(isset($_SESSION["account"])!=true)
{
header('Location: '.$url);
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<!-- Your secret contents here-->
<h1>Hello, your name is:</h1>
<?php echo $_SESSION["account"]; ?>
</body>
login.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
function AjaxCheck()
{
if(document.getElementById("account").value==""){
document.getElementById("div_message").innerHTML = "You are not logged in.";
return;
};
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if(xmlhttp.responseText.match("redirect")){
window.location.href = "index.php";
}
else{document.getElementById("div_message").innerHTML=xmlhttp.responseText;}
}
}
// Use HTTP get to send user input account/password to checkLogin.php
xmlhttp.open("GET","checkLogin.php?account="+document.getElementById("account"). value+"&password="+document.getElementById("password").value,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<p>Account: </p>
<input type="text" name="account" id = "account"/>
<p>Password: </p>
<input type="password" name="password" id = "password" />
<br>
<a class="btn btn-primary" onClick = "AjaxCheck()">Login</a>
</form>
<div id = "div_message" >
div_message text
</div>
</body>
checkLogin.php
<?php
session_set_cookie_params(0);
session_start();
// NOTE: In real world, you should do some sanitization first
$account=$_GET["account"];
$password=$_GET["password"];
checkIfLogin();
function checkIfLogin(){
$con = mysql_connect("localhost","YourDatabaseAccount","YourDatabasePassword");
if (!$con){die('Could not connect: ' . mysql_error());}
mysql_select_db("YourDB", $con);
$result = mysql_query("SELECT * FROM `YourTable` WHERE `Account` = '".$GLOBALS['account']."' " );
$row = mysql_fetch_array($result);
if($row==NULL){echo "This account does not exist"; mysql_close($con); return;}
if(strcmp($row['Password'],SHA1($GLOBALS['password']))==0){
$_SESSION['account'] = $GLOBALS['account'];
echo "redirect" ;
}
else{echo "Incorrect Password" ;}
mysql_close($con);
}
?>
备注
上面的示例代码 "work" 但应该考虑 "dirty",只是一个简单的例子。
我知道您希望答案尽可能简单,但是 account/password 的示例应该能让您了解会话或 cookie 的工作原理。以后可以按照自己喜欢的方式实现。
您可能会发现这些 sites/topics 有用:
- AJAX
- PHP 5 Sessions
- PHP 5 Complete Form Example
- PHP 5 Form Validation
- basic SQL,以及关于通用数据库和 SQL。
的事情
P.S。其实你不需要 AJAX 来实现你的目标,但为什么不了解更多呢? :)
编辑:如果您没有可用的数据库,这里有一个简单的 checkLogin.php,它只允许用户 "John" 和密码“123”通过。
<?php
session_set_cookie_params(0);
session_start();
$account=$_GET["account"];
$password=$_GET["password"];
checkIfLogin();
function checkIfLogin(){
if(strcmp($GLOBALS['account'],"John")!=0){
echo "Invalid Account";
}else if(strcmp($GLOBALS['password'],"123")!=0){
echo "Incorrect Password";
}
else{
$_SESSION['account'] = $GLOBALS['account'];
echo "redirect" ;
}
}
?>
您可以使用 php 会话来执行此操作。在您要限制访问的页面上可以包含以下代码:
<?php
session_start() // this starts the php session
if($_SESSION['auth'] !== 'true') // this checks if the session variable "auth"
// is not true
{
header("Location: /homepage.php"); // if "auth" is not true, it will redirect
// back to your home page. you can switch
// out "/homepage.html" with whatever your
// actual page is.
}
?>
<html>
<body>Rest of html content...
主页看起来像这样:
<?php
session_start(); // starts the session
$buttonClicked=$_POST['access']; // checks to see if the button has been clicked
if($buttonClicked) {
$_SESSION['auth'] = 'true'; // sets the session variable auth to true so user
// can have access to other page
header("Location: /otherpage.php"); // sends the user to the other page
}
?>
<html>
<body>
<form method="post" action="homepage.php">
<input type="submit" value="Go to other page" name="access" />
</form>
</body>
</html>
当用户单击 html 按钮时,它将把他们发送到 "otherpage.php",他们将能够进入。两个页面都需要是 .php 而不是 .html虽然。
我正在做一个网站,我想阻止用户在他或她完成一些预定义的目标之前访问内容。
例如,我想阻止用户去我页面的某个地方,直到他们去另一个地方。喜欢阻止没有适当级别的人访问网络的那部分。
我想尽可能避免使用密码。
我将在我网页的几个部分中使用它。
感谢您的帮助。
这是您问题的一个简单示例:
index.php 将用户重定向到 login.php 如果指定的 $_SESSION 变量不存在。
login.php 包含基本的 account/password 形式。 login.php用AJAX调用checkLogin.php检查account/password是否正确。
checkLogin.php 通过将用户输入与数据库中的数据进行比较来检查 account/password 是否正确(mySQL 在这个例子中)。
如果 account/password 正确,checkLogin.php 启动 $_SESSION["account"] 并将用户重定向回来至 index.php.
index.php
<?php
session_set_cookie_params(0);
session_start();
ob_start();
// Redirect to login.php if $_SESSION["account"] is not set
$url = "login.php";
if(isset($_SESSION["account"])!=true)
{
header('Location: '.$url);
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<!-- Your secret contents here-->
<h1>Hello, your name is:</h1>
<?php echo $_SESSION["account"]; ?>
</body>
login.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
function AjaxCheck()
{
if(document.getElementById("account").value==""){
document.getElementById("div_message").innerHTML = "You are not logged in.";
return;
};
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if(xmlhttp.responseText.match("redirect")){
window.location.href = "index.php";
}
else{document.getElementById("div_message").innerHTML=xmlhttp.responseText;}
}
}
// Use HTTP get to send user input account/password to checkLogin.php
xmlhttp.open("GET","checkLogin.php?account="+document.getElementById("account"). value+"&password="+document.getElementById("password").value,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<p>Account: </p>
<input type="text" name="account" id = "account"/>
<p>Password: </p>
<input type="password" name="password" id = "password" />
<br>
<a class="btn btn-primary" onClick = "AjaxCheck()">Login</a>
</form>
<div id = "div_message" >
div_message text
</div>
</body>
checkLogin.php
<?php
session_set_cookie_params(0);
session_start();
// NOTE: In real world, you should do some sanitization first
$account=$_GET["account"];
$password=$_GET["password"];
checkIfLogin();
function checkIfLogin(){
$con = mysql_connect("localhost","YourDatabaseAccount","YourDatabasePassword");
if (!$con){die('Could not connect: ' . mysql_error());}
mysql_select_db("YourDB", $con);
$result = mysql_query("SELECT * FROM `YourTable` WHERE `Account` = '".$GLOBALS['account']."' " );
$row = mysql_fetch_array($result);
if($row==NULL){echo "This account does not exist"; mysql_close($con); return;}
if(strcmp($row['Password'],SHA1($GLOBALS['password']))==0){
$_SESSION['account'] = $GLOBALS['account'];
echo "redirect" ;
}
else{echo "Incorrect Password" ;}
mysql_close($con);
}
?>
备注
上面的示例代码 "work" 但应该考虑 "dirty",只是一个简单的例子。
我知道您希望答案尽可能简单,但是 account/password 的示例应该能让您了解会话或 cookie 的工作原理。以后可以按照自己喜欢的方式实现。
您可能会发现这些 sites/topics 有用:
- AJAX
- PHP 5 Sessions
- PHP 5 Complete Form Example
- PHP 5 Form Validation
- basic SQL,以及关于通用数据库和 SQL。 的事情
P.S。其实你不需要 AJAX 来实现你的目标,但为什么不了解更多呢? :)
编辑:如果您没有可用的数据库,这里有一个简单的 checkLogin.php,它只允许用户 "John" 和密码“123”通过。
<?php
session_set_cookie_params(0);
session_start();
$account=$_GET["account"];
$password=$_GET["password"];
checkIfLogin();
function checkIfLogin(){
if(strcmp($GLOBALS['account'],"John")!=0){
echo "Invalid Account";
}else if(strcmp($GLOBALS['password'],"123")!=0){
echo "Incorrect Password";
}
else{
$_SESSION['account'] = $GLOBALS['account'];
echo "redirect" ;
}
}
?>
您可以使用 php 会话来执行此操作。在您要限制访问的页面上可以包含以下代码:
<?php
session_start() // this starts the php session
if($_SESSION['auth'] !== 'true') // this checks if the session variable "auth"
// is not true
{
header("Location: /homepage.php"); // if "auth" is not true, it will redirect
// back to your home page. you can switch
// out "/homepage.html" with whatever your
// actual page is.
}
?>
<html>
<body>Rest of html content...
主页看起来像这样:
<?php
session_start(); // starts the session
$buttonClicked=$_POST['access']; // checks to see if the button has been clicked
if($buttonClicked) {
$_SESSION['auth'] = 'true'; // sets the session variable auth to true so user
// can have access to other page
header("Location: /otherpage.php"); // sends the user to the other page
}
?>
<html>
<body>
<form method="post" action="homepage.php">
<input type="submit" value="Go to other page" name="access" />
</form>
</body>
</html>
当用户单击 html 按钮时,它将把他们发送到 "otherpage.php",他们将能够进入。两个页面都需要是 .php 而不是 .html虽然。