webForumDet fria alternativet

Cookien sitter inte kvar..... Varför?

PHP

4 svar · 371 visningar · startad av eklof00

Medlem sedan jan. 200737 inlägg
Frågan#1

Jag vill att "username" står i fältet på rad 73 angiven tid.

Cookien sätter jag på rad 4.

Vad är felet?

Jag har följande kod:

<?php
session_start(); // Alltid överst på sidan

setcookie('username', $_POST['user'], time() + (7 * 24 * 60 * 60);
 
include "conn.php"; // Databasanslutningen
// Inloggning
if (isset($_POST['submit'])){
 
  $_POST = db_escape($_POST);
  
  $sql = "SELECT user_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_user_id'] = mysql_result($result, 0, 'user_id'); 
  $_SESSION['sess_pass'] = $_POST['passwd'];
  $_SESSION['sess_user'] = $_POST['user'];
  header("Location: index2.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>
<style type="text/css">
<!--
.style1111 {
	color: #FF0000;
	left: auto;
}
-->
</style>
</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 '<p class="style1111">Fel användarnamn eller lösenord!</p>';
    }
  
?>

<form action="index.php" method="post">
Användarnamn:<br>
<input type="text" name="user"  value="<?php echo isset($_COOKIE['username']) ? $_COOKIE['username'] : ''; ?>"><br>
Lösenord:<br>
<input type="password" name="passwd"><br>
<input type="submit" name="submit" value="Logga in">
</form>
<p>Inte medlem ?<br>
  <a href="register.php">Registera dig</a>
  <?php
 
} else {
 
  echo "<a href=\"index.php?logout=\">Logga ut</a>\n";
 
}
 
?></p>
</body>
</html>
Medlem sedan juni 20006 031 inlägg
#2

När man har satt en cookie så kan den inte läsas i samma sidvisning utan endast efter att en annan sida laddats.
Mitt förslag är att du riktar inloggningsformuläret till en annan sida som sätter cookien och dina sessioner och sen skickar tillbaks till startsidan med en header location.

Medlem sedan jan. 200737 inlägg
#3

Det funkar.

Gjorde en fil, setcookie.php

Jag har en tanke!

Går det att sätta en if-sats som har funktionen att en pop-up sida kommer upp om man INTE har satt cookien efter att man loggat in?

setcookie.php

<?PHP
session_start(); // Alltid överst på sidan

if (isset($_POST['submit'])){
$settime = time() + (30 * 24 * 60 * 60);
setcookie('username', $_POST['user'], $settime);
header("Location: setcookie_done.php");
}
 ?>
<form action="setcookie.php" method="post">
<input name="user" type="text" value="<?php echo isset($_COOKIE['username']) ? $_COOKIE['username'] : ''; ?>">
<input type="submit" name="submit" value="Skicka">
</form>
Medlem sedan juni 20006 031 inlägg
#4

Visst går det, men till vilken nytta? Blockerar användaren cookies så vet han ju att han inte kan använda funktionerna som används av cookien.

Tänk på att många har pop-up blockerare, men en alert ruta kan ju användas.

Medlem sedan jan. 200737 inlägg
#5

Så här blev det.

Satte setcookien efter if (isset($_POST['submit'])){...

funkar nu som jag vill...

<?php
session_start(); // Alltid överst på sidan

include "conn.php"; // Databasanslutningen

// Inloggning
if (isset($_POST['submit'])){

$settime = time() + (30 * 24 * 60 * 60);
setcookie('user', $_POST['user'], $settime);

osv.....
254 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)