- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是我的问题:
我有一个名为 login.php 的登录页面(不包含 HTML 代码)。当用户正确输入其凭据时,他将被重定向到特定页面;对于这个例子,我们会说 test.php。该页面上的唯一链接退出当前 session ,并将用户返回到 index.html。
我的问题是,如果用户按下后退按钮,它会返回到 login.php,您会得到一个空白页面。如果您离开该空白页面,您将无法返回到 test.php,因此无法注销该 session 。
我最初的想法是使用 Javascript 禁用后退按钮导航。最终我发现那是行不通的,因为如果用户找到了一种不注销就离开该页面的方法,他们将被困在该 session 中,而 login.php 将是空白的。
那么,如果按下后退按钮,有什么方法可以结束当前 session 吗?或者如果重新加载 login.php?我不太熟悉 PHP,所以非常感谢详细的解释。
这是登录页面的代码:
<?php
/**
* The idea of this application is to secure any page with one link. I know some of the professionals
* will agree with me considering the way it has been done, usually you wouldnt put any other information such as
* HTML/CSS with a class file but in this case its unavoidable. This is to make it easier for the non techys to use.
* @author John Crossley <john@suburbanarctic.com>
* @version Version 2
**/
// Turn off error reporting.
error_reporting(0);
# Start a new session, regenerate a session id if needed.
session_start();
if (!isset($_SESSION['INIT'])) {
session_regenerate_id();
$_SESSION['INIT'] = TRUE;
}
class JC_fsl {
public static $_init;
protected $_users = array();
# Script configuration
protected static $_script_name;
protected static $_admin_email;
protected static $_admin_name;
private static $_version = '{Version 2.0.1}';
protected function __construct() {
if (!isset($_SESSION['LOGIN_ATTEMPTS']))
$_SESSION['LOGIN_ATTEMPTS'] = 0;
// Default user admin added.
$this->_users = array(
array(
'USERNAME' => 'admin',
'PASSWORD' => 'master13',
'EMAIL' => 'seth@procstaff.com',
'LOCATION' => 'master.php')
);
}
public function __toString() {
return 'SCRIPT NAME :: ' . self::$_script_name . "<br />" .
' ADMIN EMAIL :: ' . self::$_admin_email . "<br />" .
' ADMIN NAME :: ' . self::$_admin_name . "<br />" .
' FSL VERSION :: ' . self::$_version;
}
/**
* This method allows you to peek inside the users list, so you can view their information.
**/
public function peek() {
var_dump($this->_users);
}
protected function ready_array($username, $password, $email, $location = 'index.html', $access = false) {
return array('USERNAME' => $username, 'PASSWORD' => $password, 'EMAIL' => $email, 'LOCATION' => $location);
}
public function add($username, $password, $email, $location = 'index.html') {
$add = $this->ready_array($username, $password, $email, $location);
$this->_users[] = $add;
}
public static function logout() {
if (isset($_SESSION['LOGGED_IN'])) {
if (session_destroy())
header('Location: index.html');
}
}
/**
* This method increments or returns login attempts.
* @param <bool> true to increment by 1 and false to return.
*/
public static function attempts($add = false) {
if ($add === true)
$_SESSION['LOGIN_ATTEMPTS'] += 1;
else
return $_SESSION['LOGIN_ATTEMPTS'];
}
public function site_name() {
return self::$_script_name;
}
public function validate($un, $pw) {
# Check all of the arrays for the user
for ($i=0;$i<count($this->_users);$i++) {
if (array_key_exists('USERNAME', $this->_users[$i])) {
if ($this->_users[$i]['USERNAME'] == $un) {
# We have found the user check to see if there password matches also.
$info = $this->_users[$i];
if ($info['USERNAME'] == $un && $info['PASSWORD'] == $pw) {
# We have a match redirect the user.
$_SESSION['LOGGED_IN'] = TRUE;
$_SESSION['LOGIN_ATTEMPTS'] = 0;
$_SESSION['USERNAME'] = $info['USERNAME'];
$_SESSION['EMAIL'] = $info['EMAIL'];
header('Location: ' . $info['LOCATION']);
return;
}
}
}
}
echo '<h2 class=\'error\'>Incorrect username and or password, try again!</h2>';
self::attempts(true);
}
/**
* Forgot password? not a problem call this method with the correct username
* and the user will be sent a password reminder. Please note that not of these passwords
* are hashed meaning this is not a good idea to store personal information behind this script!
* @param <string> The users email address.
* @return <bool> Returns true upon success.
*/
public function forgot($email) {
for ($i=0;$i<count($this->_users);$i++) {
if (array_key_exists('EMAIL', $this->_users[$i])) {
if ($this->_users[$i]['EMAIL'] == $email)
$info = $this->_users[$i];
} else return false;
}
if (isset($info) && is_array($info)) {
# Send the user their password
$to = $info['EMAIL'];
$subject = 'You recently forgot your password | ' . self::$_script_name;
$message = 'Hi ' . $info['USERNAME'] . ', ' . "\n\n";
$message .= 'You recently requested your password for ' . self::$_script_name . ' if you didn\'t not to worry just ignore this ';
$message .= 'email. Anyway you can find your email below, should you require anymore assistance then please contact us ';
$message .= 'at ' . self::$_admin_email . ".\n\n";
$message .= 'Username: ' . $info['USERNAME'] . "\n";
$message .= 'Password: ' . $info['PASSWORD'];
$message .= "\n\n" . 'Best Regards, ' . "\n" . self::$_admin_name;
$headers = 'From: ' . self::$_admin_email . "\r\n" .
'Reply-To: ' . self::$_admin_email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
# Uncomment for final version
if (mail($to, $subject, $message, $headers)) return true;
}
}
/**
* The secure method, simply call this to lock any page down it's as simple as that.
* @param <string> Name of the script EG: John's Script
* @param <string> Email of the administrator EG: john@suburbanarctic.com
* @param <string> Admin name EG: John Crossley
* @return <object> Returns an instanciated object of this class.
*/
public static function secure($s_name = '', $a_email = '', $a_name = '') {
self::$_script_name = $s_name;
self::$_admin_email = $a_email;
self::$_admin_name = $a_name;
if (!self::$_init instanceof JC_fsl) {
self::$_init = new JC_fsl();
}
return self::$_init;
}
}
# You may edit me
$secure = JC_fsl::secure();
##########################################################################
########################## YOUR EDITING BLOCK ###########################
$secure->add('mbhaynes', 'mbhaynes13', 'seth@procstaff.com', 'mbhaynes.php');
$secure->add('emory', 'emory13', 'seth@procstaff.com', 'emory.php');
$secure->add('ehg', 'ehg13', 'seth@procstaff.com', 'redirect.html');
$secure->add('dhgriffin', 'dhgriffin13', 'seth@procstaff.com', 'dhgriffin.php');
$secure->add('neo', 'neo13', 'seth@procstaff.com', 'neo.php');
$secure->add('first', 'first13', 'seth@procstaff.com', 'first.php');
$secure->add('test', 'test', 'seth@procstaff.com', 'test.php');
##########################################################################
##########################################################################
############ FORM PROCESSING ############
if (isset($_POST['username']) && isset($_POST['password'])) {
$secure->validate($_POST['username'], $_POST['password']);
}
if (isset($_GET['logout'])) $secure->logout();
if (isset($_POST['forgot_password_button']) && isset($_POST['email'])) {
// We need to send the user their password.
if ($secure->forgot($_POST['email'])) {
echo '<h2 class=\'success\'>Your password has been sent to your email address!</h2>';
} else {
echo '<h2 class=\'error\'>I\'m sorry but that email address has no record on this site.</h2>';
}
}
?>
<?php if(!isset($_SESSION['LOGGED_IN'])): ?>
<style type='text/css'>
#fslv2-main{
font-family:HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;font-weight:300;font-size:14px;line-height:1.6;
margin-left:auto;
margin-right:auto;
width: 300px;
padding: 10px 10px 10px 10px;
}
fieldset { border: none; margin: 0; padding: 0;}
.fslv2 .input {
border: 1px solid #b9b9b9;
padding: 5px;
width: 225px;
outline: none;
font-size: 13px;
}
.fslv2 label {
float: left;
width: 72px;
line-height: 28px;
}
h3 { font-weight: normal; }
a { color: #4a6a81; text-decoration: none; }
a:hover { color: #4a6a81; text-decoration: underline; }
.button {
border: 1px solid #233d4f;
border-bottom: 1px solid #233d4f;
background-color: #4a6a81;
border-radius: 2px;
padding: 6px 5px;
color: #ffffff;
text-shadow: 0 1px rgba(0, 0, 0, 0.1);
margin-left:auto;
margin-right:auto;
top: 5px;
width: 100px;
min-width: 100px;
cursor: pointer;
font-size: 13px;
box-shadow: rgba(0,0,0,0.2);
-webkit-box-shadow: rgba(0,0,0,0.2);
-moz-box-shadow: rgba(0,0,0,0.2);
}
.input:focus {
-moz-box-shadow: inset 0 0 3px #bbb;
-webkit-box-shadow: inset 0 0 3px #bbb;
box-shadow: inner 0 0 3px #bbb;
}
.fsl p.la { text-align: center; }
.success {
margin: 2em auto 1em auto;
border: 1px solid #337f09;
padding: 5px;
background-color: #dd4b39;
width: 400px;
text-align: center;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
font-weight: normal;
font-family:HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;font-weight:300;font-size:14px;line-height:1.6;
}
.error {
margin: 2em auto 1em auto;
border: 1px solid #233d4f;
padding: 5px;
background-color: #8bafc5;
width: 400px;
text-align: center;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
font-weight: normal;
font-family:HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;font-weight:300;font-size:14px;line-height:1.6;
}
</style>
<div id="fslv2-main">
<?php if($secure->attempts() > 5): ?>
<!-- Show the login form -->
<p>Too many failed attempts, please try again later.</p>
<?php elseif(isset($_GET['forgot_password'])): ?>
<fieldset class="fslv2">
<form method="post" action="#">
<p>
<label for='email'>Email: </label>
<input type='text' name='email' class='input'/>
</p>
<p><input type='submit' name='forgot_password_button' class='button' value='Send!' /></p>
</form>
</fieldset>
<small><a href="index.html">Cancel</a></small>
<?php else: ?>
<fieldset class="fslv2">
<legend><?php echo $secure->site_name(); ?></legend>
<form method="post" action="#">
<p>
<label for='username'>Username: </label>
<input type='text' name='username' class='input'/>
</p>
<p>
<label for='password'>Password: </label>
<input type='password' name='password' class='input'/>
</p>
<p><input type='submit' name='login' class='button' value='Login' /></p>
</form>
</fieldset>
<?php endif; ?>
</div><!-- #fslv2-main -->
<?php exit(); endif; ?>
最佳答案
如果你登录后回到主页面,尝试刷新页面,如果session设置正确那么刷新后你会自动登录或者显示登录状态,否则会有破坏主页中所有 session 的东西?我会选择第一个条件,因为这种情况在我身上发生过很多次,最好在同一页面显示登录表单,您希望在该页面上显示仅注册用户的内容,并在登录后快速将它们重定向到同一页面,这样所有 session 工作正常,当您将它们重定向到同一页面时,后退按钮不会产生问题....
编辑:它不会影响拥有单独页面的用户,因为整个登录表单将在登录后由用户内容更改。
试试这个:
if(isset($_SESSION['LOGGED_IN'])){
//User is logged-In check for existence of its name file,
$user = $_SESSION["LOGGED_IN"]."php";
If(file_exists($user)){
//User's named file exists now include it.
include("yourfolder/$user");
}else{
//He was loggedIn in but file wasn't found...
echo"Sorry nothing for you :P";
}
}else{
//Show the logIn form
}
关于PHP - Session_Destroy 按后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14529975/
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!