2009-05-13 15 views
5

Im muy nuevo en php y tratan de utilizar cookies pero no se Woking en mi sitio, me puede orientar alguien por favor, lo que va mal en mi código:Las cookies no están siendo colocado correctamente en Script PHP

<?php 
session_start(); 
?> 
<script> 
function Redirect(url) 
{ 
location.href = url; 
} 

</script> 
<?php 

define('_VALID_ACCESS', true); 
include_once "includes/connect.php"; 
include_once "includes/login.php"; 


if(empty($_POST['loginname']) || empty($_POST['password'])) 
{ 
    $msg = "User or password is empty"; 
} 
else 
{ 
    if(login($_POST['loginname'], $_POST['password']) == true) 
    { 
     $usern = $_POST['loginname']; 
     session_register('loginname'); 
     $loginname = $usern;   
     sleep(1); 
      if(activestatus($_POST['loginname'], $_POST['password']) == true) 
      { 
      $usern = $_POST['loginname']; 
      session_register('loginname'); 
      $loginname = $usern;   
      sleep(1); 

      $hour = time() + 3600; 
      setcookie("ID_my_site", $_POST['loginname'], $hour); 
      setcookie("Key_my_site", $_POST['password'], $hour); 
      $test = $_COOKIE["ID_my_site"]; 
      $msg = "<script> Redirect ('home.html?testname=".$test."')</script>"; 
      //header("Location: home.html"); 
      } 
      else 
      { 
      $msg = "<script> Redirect ('valid.php?testname=".$usern."')</script>"; 
      } 

    } 
    else 
    { 
     $msg = "<font color=red>User or Password is wrong</font>"; 
    } 
} 
echo '<div id="divTarget">' . $msg . '</div>'; 
?> 
    <link rel="stylesheet" href="css/blueprint/screen.css" type="text/css" media="screen, projection"> 
    <link rel="stylesheet" href="css/blueprint/print.css" type="text/css" media="print"> 
    <link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection"> 
<body> 
<div class="container" id="login_container"> 
<form id="login" action="action.php" method="post" name="loginform" > 
    <fieldset id="login_screen" style="width:350px"> 
     <label id="login_label" for="login">User Login </label> 
     <br><br> 
     <label for="login">Email Address</label> 
     <input type="text" name="loginname" id="loginname" value="[email protected]">  
     <p id="space"><label for="password">Password</label> 
     <input type="password" id="password" name="password" value="********" ></p> 
     <input type="checkbox">Keep me signed in until i signout 
     <p id="test"><input type="submit" value="Submit"></p> 
     <a href="forgetpassword.html">Forgot 
     your password</a>&nbsp;&nbsp;|<span id="free">Not a member?</span><a href="regForm.html">Sign up</a><blink><span id="free">Free</span></blink> 
     </p> 
    </fieldset> 
</form> </div> 
</body> 
+0

Usted puede encontrar [ 'nueva cookie ($ nombre)' ] (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php # L51) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Cookie). – caw

Respuesta

6

Encienda display_errors y establecer su error_reporting a E_ALL y debería ver un mensaje de error sobre "encabezados ya enviados" - debe llamar a setcookie() ANTES DE QUE SE ENVÍE CUALQUIER HTML. De php.net/setcookie:

setcookie() define una cookie para ser enviado junto con el resto de los protocolos HTTP cabeceras. Al igual que otros encabezados, las cookies deben enviarse antes de cualquier salida desde su secuencia de comandos (esta es una restricción de protocolo ). Esto requiere que realice llamadas a esta función antes de cualquier salida, incluidas las etiquetas y cualquier espacio en blanco.

En el bloque de código que ha publicado este bit:

<script> 
function Redirect(url) 
{ 
location.href = url; 
} 

</script> 

SE impriman directamente en el navegador así antes de que usted intenta establecer las cookies.

Sus dos posibilidades serían utilizar el almacenamiento en búferes de salida para que muestre todo al final o para cambiar a un método donde todo su código de procesamiento se ejecute primero en un script y allí establezca $ _SESSION y valores de cookies y luego incluya un segundo script en el extremo posterior del primero que contenga el código que se enviará al navegador.

2

Primero no necesita session_register, simplemente puede hacer.

Desde session_register es el método preferido ya 4.1.0 y obsoleta a partir de PHP 5,3

$_SESSION["loginname"] = $_POST["loginname"] 

segundo si se va a utilizar sesiones, el flujo podría ser mejor, ya que esto no funciona.

$_SESSION["foo"] = 1; 
header("Location: stuff.php"); 

Entonces no puede ver los datos de la sesión en stuff.php. Puede enviar al usuario a la página principal y realizar la autenticación allí, y si se procesa, continúa con la carga de la página principal y, si no lo hace, envía al usuario nuevamente al inicio de sesión. página como esta.

if($_SESSION["authenticated"] == 0) 
{ 
    header("Location: login.php"); 
    die(); 
} 
+0

Gracias estoy empezando en la fase de aprendizaje. – jbcedge

+0

¿Por qué wouldnt stuff.php poder ver los datos de la sesión? Supongo que quiere decir lógicamente que no quiere que stuff.php pueda acceder a los datos de la sesión en lugar de a la configuración de la variable de sesión El valor "foo" no sería visible en stuff.php? –

+0

Si realiza un redireccionamiento de encabezado HTTP, los datos de la sesión no se escriben en el servidor. A menos que especifiques que se escriba en el servidor con algo como session_write_close() http://is.php.net/manual/en/function.session-write-close.php –

3

Prueba esto (consignar la raíz de su sitio):

setcookie("ID_my_site", $_POST['loginname'], $hour,'/'); 

o probar esto (la adición de las cotizaciones a su LoginName):

setcookie("ID_my_site", "$_POST['loginname']", $hour,'/'); 
1

Además, no se debe almacenar una contraseña: datos de cookies: esta es una gran seguridad ¡No, no!

Si quieres hacer algo así establecer un único - al azar - identificador que cambia al iniciar la sesión y utilizar en su lugar (que aún debe MD5)

Cuestiones relacionadas