Avatar billede rampagezz Nybegynder
06. februar 2008 - 20:50 Der er 35 kommentarer og
1 løsning

"Husk mig" med Checkbox til login

Hej eksperter

Har oprettet dette lignende spørgsmål i Javascript, men blev anbefalet at bruge PHP.

Jeg har en loginform, hvor jeg har en checkbox, som man kan afkrydse, hvorefter den så skal kunne huske brugerens brugernavn og kode.

Kode:

<tr>
    <td class="brodtekst"><form name="form1" method="post" action="checklogin.php">
  <table width="116" border="0" cellpadding="0" cellspacing="0" class="logintable" id="login">
<tr valign="top">
<td height="16" colspan="2" class="brodtekst2">Login:</td>
</tr>
<tr>
<td width="78" height="10" class="liste">User:</td>
<td width="294">
      <div align="left">
        <input name="myusername" type="text" id="myusername" size="8">
      </div></td></tr>
<tr>
<td height="10" class="liste">Pass:</td>
<td>
      <div align="left">
        <input name="mypassword" type="password" id="mypassword" size="8">
      </div></td></tr>
<tr>
  <td colspan="2"><div align="center">
    <input name="Submit" type="image" class="brodtekst" src="../jpg/login.jpg" value="Login">
  </div></td>
  </tr>
<tr>
  <td height="10"><input type='checkbox' id='huskmig' name='huskmig' value='1' onClick='if(this.checked)return confirm("Bekræft du ønsker at logge automatisk ind fremover")'></td>
  <td height="10"><label for='label2' class="liste">Husk mig</label></td>
</tr>
<tr>
<td height="16" colspan="2"><div align="center"><u><a href="glemt_pass.php" class="startdato">glemt password</a></u></div></td>
</tr>
</table>
</form></td>
  </tr>
Avatar billede jannek_ek Nybegynder
06. februar 2008 - 22:55 #1
Du skal bruge cookies.

hvis brugeren har valgt husk mig, skal der når han logger ind gemmes to cookies.
setcookie  ( "username" , $_POST['myusername'] );
setcookie  ( "password" , $_POST['mypassword'] );

Du bør kryptere password, men det er ikke et nødvendigt.

For at undgå at brugeren bliver spurgt om password, hvis han har bedt siden om at huske ham, bruger du følgende kode:

if (!isset($_COOKIE['username'])
{
  vis loginformular
} else
{
  login med $_COOKIE['username'] og $_COOKIE['password']
}

hvis du vil vide mere om php og cookies kan du læse det her:
http://dk2.php.net/manual/da/function.setcookie.php
Avatar billede rampagezz Nybegynder
07. februar 2008 - 18:36 #2
Men hvordan forbinder jeg det til min checkbox?
Avatar billede jannek_ek Nybegynder
07. februar 2008 - 19:31 #3
hvis en checkbox er mærket af, har den den værdi man sætter i value. Ellers har den ingen værdi.
Det vil sige:

if ( $_POST['huskmig']==1 )
{
  setcookie  ( "username" , $_POST['myusername'] );
  setcookie  ( "password" , $_POST['mypassword'] );
}
Avatar billede rampagezz Nybegynder
07. februar 2008 - 20:11 #4
Jeg har prøvet at bruge det sidste script og lagt det som det første på min "checklogin.php", men der bliver ikke oprettet en cookie...
Jeg har også prøvet med dette:

if (!isset($_COOKIE['username'])
{
"loginform"
} else {
header("location:calendar.php");

Ved ikke helt hvad du mener med: login med $_COOKIE['username'] og $_COOKIE['password']?
Avatar billede jannek_ek Nybegynder
07. februar 2008 - 20:58 #5
jeg mener at du skal logge ind med $_COOKIE['username'] og $_COOKIE['password'] ... det er jo de cookies, brugernavn og password er gemt i .. de svarer til $_POST['username'] og $_POST['password'].
Avatar billede rampagezz Nybegynder
11. februar 2008 - 20:12 #6
Jeg ved ikke hvordan du vil have jeg skal logge ind med $_COOKIE['username'] og $_COOKIE['password'].?


Jeg har lagt dette i min checklogin.php:

<?php if ( $_POST['huskmig']==1 )
{
  setcookie  ( "username" , $_POST['myusername'] );
  setcookie  ( "password" , $_POST['mypassword'] );
}
?>

Er rimelig rookie.. :-)
Avatar billede jannek_ek Nybegynder
11. februar 2008 - 20:54 #7
kan du ikke lige vise det script du bruger til at logge ind med, så tror jeg det er lettere at vise hvad du skal gøre.
Avatar billede rampagezz Nybegynder
11. februar 2008 - 21:23 #8
Her er scriptet som tjekker brugeren, når der bliver trykket "submit" i login-formen:

<?php if ( $_POST['huskmig']==1 )
{
  setcookie  ( "username" , $_POST['myusername'] );
  setcookie  ( "password" , $_POST['mypassword'] );
}
?>
<?php
ob_start();
$host="localhost"; // Host name
$username="********"; // Mysql username
$password="********"; // Mysql password
$db_name="********"; // Database name
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from signup form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$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){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
header("location:login_failed.php");
}
ob_end_flush();

?>
Avatar billede jannek_ek Nybegynder
11. februar 2008 - 21:45 #9
Erstat

// username and password sent from signup form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

med

if(isset($_COOKIE['username']))
{
  $myusername=$_COOKIE['username'];
  $mypassword=$_COOKIE['password'];
} else
{
  // username and password sent from signup form
  $myusername=$_POST['myusername'];
  $mypassword=$_POST['mypassword'];
}

på siden hvor brugeren kan logge ind, skal du skrive følgende i starten af siden (også før lineskift eller mellemrum):

<?php
  if (isset($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }
?>
Avatar billede rampagezz Nybegynder
11. februar 2008 - 21:51 #10
Nu kan jeg ikke få lov at logge ud?

Jeg har følgende kode i starten på login siden:

<?php
  if (isset($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }
?>
<?php
session_start();
if(!isset($_SESSION["myusername"])){
?>

Session tjekker om brugeren er logget ind i forvejen.
Avatar billede jannek_ek Nybegynder
11. februar 2008 - 22:32 #11
hov min fejl
  if (isset($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }
skal selvfølgelig kun udføres hvis brugeren ikke er logget ind:

<?php
  if (isset($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }
?>
<?php
session_start();
if(!isset($_SESSION["myusername"])){
?>

skrives om til:

<?php
session_start();
if(isset($_SESSION["myusername"]))
{
  if (isset($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }
?>

Endvidere skal cookiesne slettes igen, hvis brugeren logger ud. Dette gøres ved at sætte dem til ingenting:
  setcookie  ( "username" , "" );
  setcookie  ( "password" , "" );
Avatar billede rampagezz Nybegynder
13. februar 2008 - 19:00 #12
Hmm.. Nu viser den bare blank side.. :-(
Har dette på login siden:

<?php
session_start();
if(isset($_SESSION["myusername"]))
{
  if (isset($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }
?>

[ Indhold ]

<?php
} else {
header("location:calendar_login.php");
?>
<?
}
?>
Avatar billede jannek_ek Nybegynder
13. februar 2008 - 19:57 #13
<?php
session_start();
if(!isset($_SESSION["myusername"]))
{
  if (isset($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }
?>

damn glemte at negere den (!)
Avatar billede rampagezz Nybegynder
13. februar 2008 - 20:36 #14
Nu virker login siden igen, men den husker ikke brugernavn og password, når jeg klikker "husk login"...
Avatar billede rampagezz Nybegynder
13. februar 2008 - 20:37 #15
Hvis jeg lukker browseren og åbner en ny, husker den ikke brugeren.. Og henter login-siden igen.
Avatar billede jannek_ek Nybegynder
13. februar 2008 - 20:46 #16
ved ikke om det er problemet, men ob_start() bliver kaldt efter der bliver sendt et linjeskft ud. Pointen med ob (output buffer) er at den sikre at serveren ikke giver et output til klienten, for så snart det er sket, kan man ikke længere arbejde med cookies.

<?php if ( $_POST['huskmig']==1 )
{
  setcookie  ( "username" , $_POST['myusername'] );
  setcookie  ( "password" , $_POST['mypassword'] );
}
?>
<?php
ob_start();
$host="localhost"; // Host name
$username="********"; // Mysql username
$password="********"; // Mysql password
$db_name="********"; // Database name
$tbl_name="members"; // Table name

skal laves om til

<?php
ob_start();
if ( $_POST['huskmig']==1 )
{
  setcookie  ( "username" , $_POST['myusername'] );
  setcookie  ( "password" , $_POST['mypassword'] );
}
$host="localhost"; // Host name
$username="********"; // Mysql username
$password="********"; // Mysql password
$db_name="********"; // Database name
$tbl_name="members"; // Table name
Avatar billede rampagezz Nybegynder
13. februar 2008 - 21:01 #17
:-(
Den vil stadig ikke.. Den logger ind, men gemmer ingen cookie..
Avatar billede rampagezz Nybegynder
13. februar 2008 - 21:02 #18
Giver dig yderligere 40. dvs. ialt 100point, hvis du kan få det til at virke.. :-)
Avatar billede jannek_ek Nybegynder
13. februar 2008 - 21:06 #19
heh det behøver du ikke, men kan du ikke lige poste alt det kode der har med login at gøre..
Avatar billede rampagezz Nybegynder
13. februar 2008 - 21:15 #20
calendar_login.php:

<?php
session_start();
if(!isset($_SESSION["myusername"]))
{
  if (isset($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }
?>
<table width="116" border="0" cellspacing="0" cellpadding="0" class="maintable">
  <tr>
    <td class="brodtekst"><form name="form1" method="post" action="checklogin.php">
  <table width="116" border="0" cellpadding="0" cellspacing="0" class="logintable" id="login">
<tr valign="top">
<td height="16" colspan="2" class="brodtekst2"><div align="center">Login:</div></td>
</tr>
<tr>
<td width="78" height="10" class="liste">User:</td>
<td width="294">
      <div align="left">
        <input name="myusername" type="text" id="myusername" size="8">
      </div></td></tr>
<tr>
<td height="10" class="liste">Pass:</td>
<td>
      <div align="left">
        <input name="mypassword" type="password" id="mypassword" size="8">
      </div></td></tr>
<tr>
  <td height="10">  </td>
  <td></td>
</tr>
<tr>
  <td colspan="2"><div align="center">
    <input name="Submit" type="image" class="brodtekst" src="../jpg/login.jpg" value="Login">
  </div></td>
  </tr>
<tr>
  <td height="10"><input type='checkbox' id='huskmig' name='huskmig' value='1' onClick='if(this.checked)return confirm("Bekræft du ønsker at logge automatisk ind fremover")'></td>
  <td height="10"><label for='label2' class="liste">Husk mig</label></td>
</tr>
<tr>
<td height="16" colspan="2"><div align="center"><u><a href="glemt_pass.php" class="startdato">glemt password</a></u></div></td>
</tr>
</table>
</form></td>
  </tr>
  <tr>
    <td></td>
  </tr>
</table>

<?php
} else {
header("location:calendar_login.php");
?>
<?
}
?>

------------------------------------------------------------------------

checklogin.php:

<?php
ob_start();
if ( $_POST['huskmig']==1 )
{
  setcookie  ( "username" , $_POST['myusername'] );
  setcookie  ( "password" , $_POST['mypassword'] );
}
$host="localhost"; // Host name
$username="********"; // Mysql username
$password="********"; // Mysql password
$db_name="********"; // Database name
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

if(isset($_COOKIE['username']))
{
  $myusername=$_COOKIE['username'];
  $mypassword=$_COOKIE['password'];
} else
{
  // username and password sent from signup form
  $myusername=$_POST['myusername'];
  $mypassword=$_POST['mypassword'];
}


$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$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){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
header("location:login_failed.php");
}
ob_end_flush();

?>

------------------------------------------------------------------------

logout.php:

<?
session_start();
session_destroy();
header("location:calendar_login.php");
?>
<?php
setcookie  ( "username" , "" );
  setcookie  ( "password" , "" );
?>
Avatar billede rampagezz Nybegynder
13. februar 2008 - 21:19 #21
Nå, smutter i seng... Kigger på det i morgen.. ( håber du finder løsningen )  :-)
Avatar billede jannek_ek Nybegynder
13. februar 2008 - 21:36 #22
logout.php:

<?php
session_start();
session_destroy();
setcookie  ( "username" , "" );
setcookie  ( "password" , "" );
header("location:calendar_login.php");
?>

----------------------------------

calendar_login.php:

dette

<?php
} else {
header("location:calendar_login.php");
?>
<?
}
?>

skal laves om til dette

<?php
}
?>

og dette

  if (isset($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }

skal laves om til

  if (isset($_COOKIE['cusername']))
  {
    header("location:checklogin.php");
  }

---------------------------------

checklogin.php:

dette

<?php
ob_start();
if ( $_POST['huskmig']==1 )
{
  setcookie  ( "username" , $_POST['myusername'] );
  setcookie  ( "password" , $_POST['mypassword'] );
}

laves om til dette

<?php
ob_start();
session_start();
if ( $_POST['huskmig']==1 )
{
  setcookie  ( "cusername" , $_POST['myusername'] );
  setcookie  ( "cpassword" , $_POST['mypassword'] );
}

og dette

if(isset($_COOKIE['username']))
{
  $myusername=$_COOKIE['username'];
  $mypassword=$_COOKIE['password'];
} else
{
  // username and password sent from signup form
  $myusername=$_POST['myusername'];
  $mypassword=$_POST['mypassword'];
}

laves om til dette

if(isset($_COOKIE['cusername']))
{
  $myusername=$_COOKIE['cusername'];
  $mypassword=$_COOKIE['cpassword'];
} else
{
  // username and password sent from signup form
  $myusername=$_POST['myusername'];
  $mypassword=$_POST['mypassword'];
}

------------

Jeg er ikke helt sikker på om det gør nogen forskel at lave username om til cusername, men hvis safemode ikke er slået til, tror jeg at $username kan referere til $_COOKIE['username']...
Avatar billede rampagezz Nybegynder
14. februar 2008 - 19:56 #23
Den virker stadig ikke.. Den gemmer ingen cookie. :-(
Avatar billede rampagezz Nybegynder
14. februar 2008 - 20:00 #24
Nu kan jeg ikke logge ud igen.. :-|
Avatar billede jannek_ek Nybegynder
14. februar 2008 - 20:19 #25
hmm det kan godt være at man skal angive timeout på cookies, for at undgå at de bliver slettet når browseren lukkes:

  setcookie  ( "cusername" , $_POST['myusername'] , time() + 99999999999 );

Håber det hjælper, for der går en uge inden jeg kommer til en computer igen.
Avatar billede rampagezz Nybegynder
18. februar 2008 - 17:42 #26
Den vil stadig ikke lave lægge en cookie på computeren. :-(
Kan det være fordi den er blandet sammen med Session ?
Avatar billede jannek_ek Nybegynder
28. februar 2008 - 10:11 #27
hov kan se i min kode at jeg ikke har ændret navnene på alle cookies .. de skal hedde henholdsvis cusername og cpassword
Avatar billede rampagezz Nybegynder
06. marts 2008 - 20:49 #28
Jeg har ændret koden alle steder til cusername og cpassword.
Avatar billede rampagezz Nybegynder
06. marts 2008 - 20:50 #29
Jeg må finde en anden løsning på problemet.. Men får point for forsøget. :-)
Avatar billede jannek_ek Nybegynder
10. marts 2008 - 19:59 #30
Beklager jeg lige har været væk i noget tid, men skolen har været lidt hård med lektierne .. :/

Men jeg kan lige prøve at smide dine koder ind på min server, og få dem til at virke..
Så poster jeg dem når de gør (bliver nok i morgen eller overmorgen).
Avatar billede jannek_ek Nybegynder
12. marts 2008 - 12:00 #31
Så er det fikset, og testet!

calendar_login.php:

<?php
session_start();
if(!isset($_SESSION["myusername"]))
{
  if (!empty($_COOKIE['username']))
  {
    header("location:checklogin.php");
  }
?>

<table width="116" border="0" cellspacing="0" cellpadding="0" class="maintable">
  <tr>
    <td class="brodtekst"><form name="form1" method="post" action="checklogin.php">
  <table width="116" border="0" cellpadding="0" cellspacing="0" class="logintable" id="login">
<tr valign="top">
<td height="16" colspan="2" class="brodtekst2"><div align="center">Login:</div></td>
</tr>
<tr>
<td width="78" height="10" class="liste">User:</td>
<td width="294">
      <div align="left">
        <input name="myusername" type="text" id="myusername" size="8">
      </div></td></tr>
<tr>
<td height="10" class="liste">Pass:</td>
<td>
      <div align="left">
        <input name="mypassword" type="password" id="mypassword" size="8">
      </div></td></tr>
<tr>
  <td height="10">  </td>
  <td></td>
</tr>
<tr>
  <td colspan="2"><div align="center">
    <input name="Submit" type="image" class="brodtekst" src="../jpg/login.jpg" value="Login">
  </div></td>
  </tr>
<tr>
  <td height="10"><input type='checkbox' id='huskmig' name='huskmig' value='1' onClick='if(this.checked)return confirm("Bekræft du ønsker at logge automatisk ind fremover")'></td>
  <td height="10"><label for='label2' class="liste">Husk mig</label></td>
</tr>
<tr>
<td height="16" colspan="2"><div align="center"><u><a href="glemt_pass.php" class="startdato">glemt password</a></u></div></td>
</tr>
</table>
</form></td>
  </tr>
  <tr>
    <td></td>
  </tr>
</table>

<?php
} else
{
    header("location:login_success.php");
}
?>



-------------------------------------------

checklogin.php:

<?php
ob_start();
if ( $_POST['huskmig']==1 && empty($_COOKIE['username']))
{
  // husker cookies i 100 dage
  setcookie  ( "username" , $_POST['myusername'] , time() + 60*60*24*100);
  setcookie  ( "password" , $_POST['mypassword'] , time() + 60*60*24*100);
}
$host="localhost"; // Host name
$username="***"; // Mysql username
$password="***"; // Mysql password
$db_name="***"; // Database name
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

if(isset($_COOKIE['username']))
{
  $myusername=$_COOKIE['username'];
  $mypassword=$_COOKIE['password'];
} else
{
  // username and password sent from signup form
  $myusername=$_POST['myusername'];
  $mypassword=$_POST['mypassword'];
}


$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$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){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
header("location:login_failed.php");
}
ob_end_flush();

?>


---------------------------------------------------

logout.php:

<?php
session_start();
session_destroy();

setcookie  ( "username" , "" );
setcookie  ( "password" , "" );

header("location:calendar_login.php");
?>
Avatar billede rampagezz Nybegynder
26. marts 2008 - 15:22 #32
Yes..! Nu virker det sørme.. Tusind tak for din hjælp og din tid.
Det var en lidt større omgang.. :-)
Avatar billede rampagezz Nybegynder
26. marts 2008 - 15:27 #33
Ved du forresten hvorfor man ikke kan logge på i Firefox ?
Når jeg prøver at logge på, går den helt amok og bliver ved med at prøve at indlæse mine to Iframes, men kan ikke.
Den står nærmest bare og blinker.
Avatar billede jannek_ek Nybegynder
26. marts 2008 - 16:08 #34
hmm jeg bruger selv firefox, og jeg testede koden i firefox, men hvis du sender et link til din side, kan jeg måske finde ud af det .. Ellers hvis du har noget kode på den side, der skal loades, som jeg ikke har set, kan du lige poste det her
Avatar billede rampagezz Nybegynder
26. marts 2008 - 16:57 #35
Jeg har også lige fundet ud af, at den ikke kan logge af i IE 6.0

Men hvis jeg fjerner dette:

setcookie  ( "username" , "" );
setcookie  ( "password" , "" );

i min logout.php så kan den godt logge ud i IE 6.0 ???

----------

Nå men prøv selv at logge ind i Firefox.

http://www.rampagezz.dk/pokerklubben/1024/

for at logge ind:
username: medlem
password: test
Avatar billede rampagezz Nybegynder
26. marts 2008 - 16:58 #36
Forresten min logout ser således ud:

<?php
session_start();
session_destroy();

setcookie  ( "username" , "" );
setcookie  ( "password" , "" );
echo '<script type="text/javascript">parent.location.reload(true)</script>';
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester