webForumDet fria alternativet

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

4 svar · 369 visningar · startad av eklof00

eklof00Medlem sedan jan. 200737 inlägg
#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>
PeddaMedlem sedan juni 20006 032 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.

eklof00Medlem 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>
PeddaMedlem sedan juni 20006 032 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.

eklof00Medlem 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.....
129 ms totalt · 3 externa anrop · v20260731065814-full.102f7fcd
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)