webForumDet fria alternativet

Loggin script som jag laddat ner.

8 svar · 2 214 visningar · startad av Forcevision

ForcevisionMedlem sedan mars 2007217 inlägg
#1

hej !

Laddade ner ett loggin script som är kodat i php. Så här ser loggin sidan ut:

<?php
require_once 'sys.class.php';

$login = new login;

$login->SetUsername("oran");
$login->SetPassword("dsfsdfsdfg");
$error = $login->CheckLogin(); 

echo $error;

 session_start();
if(isset($_SESSION['username']))
{
	
	echo "user {$_SESSION['username']} loged in  ";
}
else
{
	header('location: yourloginpage.com');
}
?>

Och min fråga är nu i varje sida som man måste vara inloggad för att se så längst upp på varje sida som måste det finnas en php kode som har med session att göra eller hur ?

Hur ser den koden ut ?
Är det något så här ?

 session_start();
if(isset($_SESSION['username']))
supercajoMedlem sedan jan. 2005114 inlägg
#2

Den delen där du ser att skaparen har gjort:

echo $error; 

 session_start();

Där session_start(); är angivet. Där startar kontrollen för om din användare är inloggad. Tänk också på att session_start skall vara högst upp på din sida, innan du har övrig kod. DVS koden med Sesson_Start och koden efter är kontrollen för om användaren är inloggad eller ej.

ForcevisionMedlem sedan mars 2007217 inlägg
#3

Ja jag vet att det skall ligga längst upp på sidan.

Men hur ser koden ut är det så här:

<?php
session_start();
if(isset($_SESSION['username']))  
?>

Eller hur ser den ut ?

supercajoMedlem sedan jan. 2005114 inlägg
#4

Ja. Om det enbart är uteslutande den kodsnutten du vill ha för att göra kontrollen. Men lämpligen bör du ha else-satsen med.

Jag hade själv använt följande kod:

 session_start(); 
if(isset($_SESSION['username'])) 
{ 
     
    echo "user {$_SESSION['username']} loged in  "; 
} 
else /*Om din besökare inte är inloggad så händer följande:*/
{ 
    header('location: yourloginpage.com'); 
} 
?>
ForcevisionMedlem sedan mars 2007217 inlägg
#5

Okej då är jag med.

Det jag inte fattar riktigt är, detta scriptet jag laddat ner innehåller bara massa php kodning och inget formulär.

Det ser ut som följande:

login.php

<?php
require_once 'sys.class.php';

$login = new login;

$login->SetUsername("oran");
$login->SetPassword("dsfsdfsdfg");
$error = $login->CheckLogin(); 

echo $error;

 session_start();
if(isset($_SESSION['username']))
{
	
	echo "user {$_SESSION['username']} loged in  ";
}
else
{
	header('location: yourloginpage.com');
}
?>

sys.class.php

<?php
// author oran - email: oranm23@gmail.com
class Settings
{
    protected $dbh;
    function __construct()
    {
$dsn = 'mysql:dbname=loginsys;host=127.0.0.1';
$user = 'userforDB';
$password = 'passwordfordb';

try {
    $this->dbh = new PDO($dsn, $user, $password);
    
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
}
}
class Registration extends Settings
{
    protected $Username;
    protected $Password;
    protected $Email;
    
    
    /**
     * @param $username
     * @return insert to private var
     */
    function SetUsername($username)
    {
        return $this->Username = mysql_real_escape_string($username);
    }
    /**
     * @return username
     */
    function GetUsername()
    {
        return $this->Username;
    }
    /**
     * @param $password
     * @return isnert to private password var
     */
    function SetPassword($password)
    {
        return $this->Password = sha1(mysql_real_escape_string($password));
    }
    /**
     * @param $Email
     * @return insert to private var
     */
    function SetEmail($email)
    {
        return $this->Email = mysql_real_escape_string($email);
    }
    /**
     * @return email
     */
    function GetEmail()
    {
        return $this->Email;
    }
    /**
     * @return array of erros if any
     */
    function Validate()
    {
        $errors =  array();
        
        // username must be at list 3 charecters
        if((strlen($this->Username)) < 3 )
        {
            $errors[] = "Username must be at list 3 characters";
        }
        // end username check
        // valid mail
        
        if(false === filter_var($this->Email, FILTER_VALIDATE_EMAIL))
        {
            $errors[] = "Email not valid";
        } 
        
        if((strlen($this->Password)) < 5 )
        {
            $errors[] = "Password must be at list 5 characters";
        }
        //
        return $errors;
        
    }
    /**
     * @return return array of errors if false
     * return true if o.k
     */
    function InsertUserToSql()
    {
        $error = $this->Validate();
        if(count($error) > 0 )
        {
                return $error;    
        }
        else
        {

        $stmt = $this->dbh->prepare("INSERT INTO users (username, password, email, regdate) VALUES (:username,    
        :password, :email, :regdate)");
        
        $stmt->bindParam(':username', $this->Username);
        $stmt->bindParam(':password', $this->Password);
        $stmt->bindParam(':email', $this->Email);
        $stmt->bindParam(':regdate', time());
        $stmt->execute();
        $arr = array();
        $arr = $stmt->errorInfo();
        return $arr;
        
        }
        
    }    
    
    
}
    class login extends Registration
    {
        /**
         * @return if falis return false if ok return session 
         */
        function CheckLogin()
        {
            
            $stmt = $this->dbh->prepare("SELECT username, password FROM users
            WHERE username = :username AND password =  :password
            ");
            $stmt->bindParam(':username', $this->Username);
            $stmt->bindParam(':password', $this->Password);
            $stmt->execute();
            
            if($stmt->rowCount() > 0 )
            {    
                
            
            $_SESSION['username'] = $this->Username;
                
            }
            else
            {
                return false;
            }
            
        }
    }
    class ChangeSetting extends Registration
    {
        
        /**
         * @return return true on succsess
         */
        function ChangeMail()
        {
            
            $EmailPattren = '/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])' .
            '(([a-z0-9-])*([a-z0-9]))+' . '(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i';
        
        $IsEmailValid = preg_match($EmailPattren, $this->Email);
        if($IsEmailValid > 0)
        {
            $stmt = $this->dbh->prepare("UPDATE users 
            SET email = :email WHERE username = :username
            ");
            $stmt->bindParam(':email', $this->Email);
            $stmt->bindParam(':username', $_SESSION['username']);
            $stmt->execute();
            return true;
        }
        else
        {
            return false;
        }
        }
            protected  $oldpass;
            
        function SetOldPass($oldpass)
        {
            return $this->oldpass = sha1($oldpass);
        }
        
        function ChangePass()
        {
            
            $stmt = $this->dbh->prepare("UPDATE users 
            SET password = :password  WHERE username = :username AND password = :oldpass
            ");
            $stmt->bindParam(':password', $this->Password);
            $stmt->bindParam(':oldpass', $this->oldpass);
            $stmt->bindParam(':username', $_SESSION['username']);
            $stmt->execute();
            
            
        }
        function SendMailForNewPass()
        {
            
            $voucher = rand() . rand() . rand();
            $stmt = $this->dbh->prepare("UPDATE users 
            SET CpassReqDate = :CpassReqDate, voucher = :voucher WHERE email = :email
            ");
            $stmt->bindParam(':CpassReqDate', time());
            $stmt->bindParam(':email', $this->Email);
            $stmt->bindParam(':voucher', $voucher);
        
            $stmt->execute();
            
            
            mail($this->Email,"new pass ","
            this is link for change pass : <a href='localhost/loginsys/sample.php/?newpassv=$voucher>link</a>'
            ");
        }
        function SetNewPass()
        {
            if(!empty($_GET['newpassv']))
            {
                $voucher = $_GET['newpassv'];
                $d = time() - 1800;
                
            $stmt = $this->dbh->prepare("SELECT CpassReqDate, email FROM users WHERE
            voucher = :voucher
            ");
            
            $stmt->bindParam(':voucher', $voucher);
            $stmt->execute();
            $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
            
            
            
                $TimeLimit = $result[0]['CpassReqDate'] - time();
                if($TimeLimit > 1800)
                {
                    echo "Voucher Experid";
                }
                else
                {
                    
                    $stmt = $this->dbh->prepare("UPDATE users 
            SET password = :password WHERE email = :email
            ");
                    $email = $result[0]['email'];
                    $pass = rand() . rand();
                    ;
            $stmt->bindParam(':password', sha1($pass));
            $stmt->bindParam(':email', $email);
            $stmt->execute();
            mail($email,"your new pass", "the new pass is<b>:  $pass</b>");
            
                }
            }
        
            
        }
        
       function Logout()
       {
          session_start();
          unset($_SESSION['username']);
      }
        
    }
    

    
    
?>

logout.php

<?php
require_once 'sys.class.php';

$logout = new ChangeSetting;
$logout->Logout();

?>

Skall man själv fixa formuläret då är tanken ?

stattinMedlem sedan jan. 2005713 inlägg
#6

Jag skulle föreslå att du söker upp ett nytt och bättre kodat login script där du får allt serverat..

..eller läs på om HTML och lär dig hur man skapar formulär
och sedan läser du på om PHP och hur man tar emot data från ett formulär
och sedan om PHP sessions
och tillsist hur man lagrar data i en databas om du nu ska använda det också.

ett bra ställe att börja på är http://www.w3schools.com/
Sen kan du gärna komma med frågor när du kört fast.

dwmediaMedlem sedan nov. 2006188 inlägg
#7
CREATE TABLE members (
  id int(11) NOT NULL auto_increment,
  user varchar(30) NOT NULL default '',
  pass varchar(32) NOT NULL default '',
  name varchar(50) NOT NULL default '',
  email varchar(50) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

mysql.php

<?php
 
// Byt ut mot dina inloggningsuppgifter och databas
$mysql_server = "localhost";
$mysql_user = "user";
$mysql_password = "malte";
$mysql_database = "members_area";
 
$conn = mysql_connect($mysql_server, $mysql_user, $mysql_password);
mysql_select_db($mysql_database, $conn);
 
 
// En funktion att användas när magic_quotes_gpc inte är satt. För att förhindra SQL-injections, eller i lidrigare fall MySQl-fel.
function db_escape ($post)
{
   if (is_string($post)) {
     if (get_magic_quotes_gpc()) {
        $post = stripslashes($post);
     }
     return mysql_real_escape_string($post);
   }
   
   foreach ($post as $key => $val) {
      $post[$key] = db_escape($val);
   }
   
   return $post;
}
 
 
/* 
   Se till att det inte finns några dolda tecken, typ radbyte 
   eller mellanslag, efter den avslutande PHP-taggen !!!
*/ 
?>

index.php

<?php
session_start(); // Alltid överst på sidan
 
include "conn.php"; // Databasanslutningen
 
// Inloggning
if (isset($_POST['submit'])){
 
  $_POST = db_escape($_POST);
  
  $sql = "SELECT id FROM members 
         WHERE user='{$_POST['user']}' 
         AND pass='{$_POST['passwd']}'";
  $result = mysql_query($sql);
  
  // Hittades inte användarnamn och lösenord
  // skicka till formulär med felmeddelande
  if (mysql_num_rows($result) == 0){
    header("Location: index.php?badlogin=");
    exit;
  }
  
  // Sätt sessionen med unikt index
  $_SESSION['sess_id'] = mysql_result($result, 0, 'id');
  $_SESSION['sess_user'] = $_POST['user'];
  header("Location: welcome.php");
  exit; 
}
 
// Utloggning
if (isset($_GET['logout'])){
  session_unset();
  session_destroy();
  header("Location: index.php");
  exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" 
  content="text/html; charset=iso-8859-1">
<title>Index</title>
</head>
<body>
<?php
 
// Om inte inloggad visa formulär, annars logga ut-länk 
if (!isset($_SESSION['sess_user'])){
 
  echo "<h3>Logga in</h3>\n";
  
  // Visa felmeddelande vid felaktig inloggning
  if (isset($_GET['badlogin'])){
    echo "Fel användarnamn eller lösenord!<br>\n";
    echo "Försök igen!\n";
  }
  
?>
<form action="index.php" method="post">
Användarnamn:<br>
<input type="text" name="user"><br>
Lösenord:<br>
<input type="password" name="passwd"><br>
<input type="submit" name="submit" value="Logga in">
</form>
Inte medlem ?<br>
<a href="register.php">Registera dig</a>
<?php
 
} else {
 
  echo "<a href=\"index.php?logout=\">Logga ut</a>\n";
 
}
 
?>
</body>
</html>

register.php

<?php
session_start(); // Alltid överst på sidan
 
include "conn.php"; // Databasanslutningen
 
if (isset($_POST['submit'])){
 
  $_POST = db_escape($_POST);
 
  // Tag bort eventuella blanksteg i början eller slutet
  foreach($_POST as $key => $val){
    $_POST[$key] = trim($val);
  }
 
  //Kolla efter tomma fält
  if (empty($_POST['user']) || empty($_POST['passwd']) || 
      empty($_POST['name']) || empty($_POST['email'])) {
    $reg_error[] = 0;
  }
  
  // Kolla om användarnamnet är upptaget
  $sql = "SELECT COUNT(*) FROM members WHERE user='{$_POST['user']}'";
  $result = mysql_query($sql);
  if (mysql_result($result, 0) > 0) {
    $reg_error[] = 1;
  }
  
  // Kolla om e-post kan tänkas vara ok
  if (!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,6}$/', $_POST['email'])) {
    $reg_error[] = 2;    
  }
 
  // Kolla så att lösenorden stämmer överrens
  if ($_POST['passwd'] != $_POST['passwd2']) {
    $reg_error[] = 3;
  }
  
  // Inga fel? Spara och logga in samt skicka till välkomstsida
  if (!isset($reg_error)) {
    $sql = "INSERT INTO members(user, pass, name, email)
            VALUES('{$_POST['user']}', '{$_POST['passwd']}', '{$_POST['name']}', '{$_POST['email']}')";
    mysql_query($sql);
    
    $_SESSION['sess_id'] = mysql_insert_id();
    $_SESSION['sess_user'] = $_POST['user'];
    header("Location: welcome.php");
    exit;     
  
  }
 
} else {
 
  // Sätt variabler för tomt formulär
  for ($i=0; $i<4; $i++) {
    $back[$i] = "";
  }
 
}
 
$error_list[0] = "Alla fält är inte infyllda";
$error_list[1] = "Användarnamnet är upptaget";
$error_list[2] = "Felaktig e-postadress";
$error_list[3] = "Lösenorden stämmer inte överrens";
 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" 
  content="text/html; charset=iso-8859-1">
<title>Registrera dig</title>
</head>
<body>
<h3>Registrera dig</h3>
<?php
if (isset($reg_error)){
 
  echo "Något blev fel:<br>\n";
  echo "<ul>\n";
  for ($i=0; $i<sizeof($reg_error); $i++) {
    echo "<li>{$error_list[$reg_error[$i]]}</li>\n";
  }
  echo "</ul>\n";
  
  $back[0] = stripslashes($_POST['user']);
  $back[2] = stripslashes($_POST['name']);
  $back[3] = stripslashes($_POST['email']);
 
}
?>
<form action="register.php" method="post">
<table cellspacing="3">
 
<tr>
<td>Användarnamn:</td>
<td><input type="text" name="user" value="<?php echo $back[0]; ?>"></td>
</tr>
 
<tr>
<td>Lösenord:</td>
<td><input type="password" name="passwd" value=""></td>
</tr>
 
<tr>
<td>Repetera lösenord:</td>
<td><input type="password" name="passwd2" value=""></td>
</tr>
 
<tr>
<td>Ditt namn:</td>
<td><input type="text" name="name" value="<?php echo $back[2]; ?>"></td>
</tr>
 
<tr>
<td>E-postadress</td>
<td><input type="text" name="email" value="<?php echo $back[3]; ?>"></td>
</tr>
 
<tr>
<td colspan="2" align="center">
  <input type="submit" name="submit" value="Spara dina uppgifter">
</td>
</tr>
 
</table>
</form>
 
</body>
</html>

welcome.php

<?php
session_start(); // Alltid överst på sidan
 
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: index.php");
  exit;
}
 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" 
  content="text/html; charset=iso-8859-1">
<title>V&auml;lkommen</title>
</head>
<body>
 
V&auml;lkommen <?php echo $_SESSION['sess_user']; ?><br>
<a href="index.php?logout=">Logga ut</a>
 
</body>
</html>
kluringenMedlem sedan juli 2011156 inlägg
#8

Forcevision skrev:

Okej då är jag med.

Det jag inte fattar riktigt är, detta scriptet jag laddat ner innehåller bara massa php kodning och inget formulär.

Du har inte angivit hur pass avancerad inloggningsrutin som du är i behov av. Denna är mycket enkel eftersom vi tillämpar ”kollektiv” inloggning. Vi byter uppgifterna med jämna mellanrum, ungefär som vi byter portkod.
Så här ser min inlogninssida ut och här har du all kod som finns bakom det du ser inklusive formulär:

<?php session_start();?>
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">

<link rel="stylesheet" href="stilmall.css" type="text/css" />

<style type="text/css">

#loginform fieldset { width: 280px; padding: 0 0 10px 15px;	}
#loginform legend { color: #000000; letter-spacing: 3px; margin-left: 0; }
.bredd {width: 280px;}

</style>

<title>Logga in</title>
</head>

<body>

<?php

/* ---------------------------------------------------------------------------
tabell för användargrupper med användarnamn, lösenord, sökväg till sidan  
som öppnas för den specifika användarkategorin och varibeln som styr åtkomst 
och menyval på sidorna */

// medlemmar
$user[0]['username'] = 'xxxxxx';
$user[0]['password'] = 'xxxxxxxxxxxxxx';
$user[0]['redirect'] = 'xxxx.php';
$user[0]['anvgrupp'] = 'interna';
// konsulter och entrepenörer
$user[1]['username'] = 'yyyyyyy';
$user[1]['password'] = 'yyyyyyyyy';
$user[1]['redirect'] = 'yyyy.php';
$user[1]['anvgrupp'] = 'externa';
// styrelsen
$user[2]['username'] = 'zzzzzzz';
$user[2]['password'] = 'zzzzzzzzzzz';
$user[2]['redirect'] = 'zzzz.php';
$user[2]['anvgrupp'] = 'regering';

$_SESSION['sida'] = 'inloggning.php';
include ("menylista.php");
?>

<div id="storruta">

<table>
<tr>
<td class="bredd">

<h1>LOGGA IN</h1>

<form id="loginform" name="loginform" method="post" action="inloggning.php">
<fieldset>
<label for="username">användarnamn:</label><p>
<input type="text" name="username" id="username" size="40" value="<?php echo $_POST['username']; ?>" /> <p>
<label for="password">lösenord:</label> <p>
<input type="password" name="password" id="password" size="30" value="<?php echo $_POST['password']; ?>" /> <br /><br />
<label for="submit"></label>
<input type="submit" name="submit" id="submit" value="Logga in" />
</fieldset>
</form> 
</td>

<td><h3>Välkommen till våra interna sidor</h3>
Som inloggad konsult/entreprenör får du åtkomst till vårt värdefulla byggarkiv. <p>
Medlemmar får aktuell info om vad som pågår i föreningen, kan läsa gamla 
och nya protokoll, medlemstidningar, information, arbetsgruppernas 
aktiviteter och mycket mera.
</td>
</tr>
</table>

<table>
<tr>
<td class="bredd">

<?php
/* -------------------------------------------------------------------------

loopar genom tabellen och kontrollerar om användarnamn och lösenord finns i tabellen
samt att användarnamn och lösenord finns på samma rad */

if (isset($_POST['username']) && isset($_POST['password'])) {

foreach($user as $login){
if($_POST['username'] == $login['username']) { $username_check = true; }
if($_POST['password'] == $login['password']) { $password_check = true; }
if($_POST['username'] == $login['username'] && $_POST['password'] == $login['password']) {

/* --------------------------------------------------------------------------------------------
startar sessionen och öppnar den skyddade sidan som är mest intressant för användargruppen */

$_SESSION[$login['anvgrupp']] = true; 
header('Location: '.$login['redirect']);
exit; 
}
}
/* ---------------------------------------------------------
kontrollerar vad som gick snett och skriver ut felmeddelande */

if ($username_check != true) {
echo '<font color="#ff0000">';
echo 'Du har angivit fel <strong>anv&auml;ndarnamn</strong>!';
echo '</font>';
echo '<br />';
}
elseif ($password_check != true) {
echo '<font color="#ff0000">';
echo 'Du har angivit fel <strong>l&ouml;senord</strong>!';
echo '</font>';
echo '<br />';
}
else {
echo '<font color="#ff0000">';
echo 'Du har angivit fel <strong>anv&auml;ndarnamn</strong> eller <strong>l&ouml;senord</strong>!';
echo '</font>';
echo '<br />';
}
}
?>

</td>
</tr>
</table>

</div>
</body>
</html>

Sen har jag tre varinter kod för skyddade sidor på första raden beroende på vilken behörighetsnivå sidan ska ha . Här är ett av dom:

<?php session_start();
//om varken extern eller styrelse är inloggad är det stopp
if ($_SESSION['interna']!==true)
{if ($_SESSION['regering']!=true) 
{header("location: last.php"); exit;}}
?>

Oskyddade sidor har bara <?php session_start();?>. Hoppas att detta är till hjälp för dig.

ForcevisionMedlem sedan mars 2007217 inlägg
#9

tackar !

145 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)