[英]PHP login with sessions
我有一天是 PHP 的初學者。 我嘗試創建我的 php 登錄代碼,但遇到了一些問題。 會話不會保留,如果我轉到其他頁面,我的網站不記得我登錄過。
<?php
$logincontent;
require_once 'config.php';
$logincontent=
' <div class="column-1-3">
<div class="white-box">
<div class="box-title">
Login
<div class="subtitle"><img src="images/subtitle-lets-work-together.png" alt="let\'s work together" /></div>
<div class="icon"><img src="images/title-icon-contact.png" alt="" /></div>
</div>
<div class="box-content fixed-height">
<form action="" method="post" class="contact-form">
<div>
<b>Username</b>
<input class="text-input" type="text" name="username" value="" onfocus="clearInput(this);" onblur="restoreInput(this);" /><br/>
<b>Password</b>
<input class="text-input" type="text" name="password" value="" onfocus="clearInput(this);" onblur="restoreInput(this);" /><br/>
<div class="align-right">
<span class="blue-button"><span><input type="submit" value="SEND »" /></span></span>
</div>
<input type="hidden" name="val" value="checkin">
</div>
</form>
</div>
</div>
</div><!--/end .column-1-3 --> ';
if (isset($_POST["val"])&&($_POST["val"]=='checkin'))
{
echo "checkin";
DBConnect();
$username=$_POST['username'];
$password=$_POST['password'];
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM users WHERE username='$username' and password='$password'";
$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)
{
@session_start();
// Register $myusername, $mypassword and redirect to file "login_success.php"
@session_register('username');
@session_register('password');
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
}
else
{
echo "Wrong Username or Password";
unset($username);
}
} else
if ((isset($_POST["val"]))&&($_POST["val"]=='logout'))
{
@session_start();
session_destroy();
} else
{
//echo $logincontent;
}
//if((isset($username))&&(!@session_is_registered($username)))
@session_start();
//if((@session_is_registered('username')))
if (isset($_SESSION['username']) && isset($_SESSION['password']))
{
if (isset($db_conn) == false)
DBConnect();
$username=$_SESSION['username'];
$password=$_SESSION['password'];
//echo $username;
//echo $password;
$sql="SELECT * FROM users WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
$logincontent=
' <div class="column-1-3">
<div class="white-box">
<div class="box-title">
Welcome back!
<div class="subtitle"><img src="images/subtitle-lets-work-together.png" alt="let\'s work together" /></div>
<div class="icon"><img src="images/title-icon-contact.png" alt="" /></div>
</div>
<div class="box-content fixed-height">
<form action="" method="post" class="contact-form">
<div>
Username: <b>'.$row['username'].'</b><br><br>
Name: <b>'.$row['name'].'</b><br>';
//if (mysql_field_len ($row['avatar'])==0)
if (isset($row['avatar']))
{
$Link='images/no_avatar.gif';
} else
{
$Link=$row['avatar'];
}
$logincontent=$logincontent."<center>
<div class='avatar-image'><img src='".$Link."' alt='' width='100' height='100'/></div></center><br>".'
<div class="align-center">
<span class="blue-button"><span><input type="submit" value="logout" /></span></span>
</div>
<input type="hidden" name="val" value="logout">'."
</div>
</form>
</div>
</div>
</div><!--/end .column-1-3 --> ";
}
?>
你需要把session_start();
在項目中每個文件的開頭。
另請注意,mysql_* 函數自 PHP 5.5 起已棄用,將來會被刪除。 您應該使用 mysqli_* 或 PDO
不要使用session_register()
,它已被棄用並且在 register globals 關閉時不起作用。 只需在 PHP 文件的最頂部啟動會話即可。 為什么要抑制session_start()
上的錯誤?
一個舊帖子,但可以對其他人有所幫助。
在要使用會話的每個頁面上,使用:
session_start();
然后您可以通過以下方式設置會話:
$_SESSION['user'] = "VALUE";
要在任何頁面上檢查會話是否存在:
if(isset($_SESSION['user'])){
//SESSION EXIST
}
然后您可以通過以下方式刪除會話:
unset($_SESSION['user']);
記得使用session_start();
在每一頁上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.