Como único é o id de sessão php
Pergunta
Como único é o id de sessão php? Eu tenho a impressão de várias coisas que eu li que eu não deveria contar com dois usuários nunca recebendo o mesmo idsessão. não é um GUID?
Solução
SESSION_ID pode realmente ser duplicados, mas a probabilidade é muito baixa. Se você tem um site com um tráfego justo, pode acontecer uma vez em que você web vida local, e só vai irritar um usuário para uma sessão.
Isto não vale a pena se preocupar com a não ser que você espera para construir um site muito alto tráfego ou um serviço para a indústria bancária.
Outras dicas
Não é muito original, como foi enviada. Na configuração padrão é o resultado de um hash de várias coisas, incluindo o resultado de gettimeofday (que não é terrivelmente único), mas se você está preocupado, você deve configurá-lo para tirar algumas entropia de / dev / urandom, como assim
ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");
procurar "php_session_create_id" em o código para o algoritmo real que está usando.
Editado para adicionar: Há um gerador de números aleatórios DFA semeado pelo pid, misturado com o tempo em usecs. Não é uma condição singularidade empresa especialmente a partir de uma perspectiva de segurança . Use a configuração entropia acima.
Update:
A partir do PHP 5.4.0 padrões session.entropy_file para / dev / urandom ou / Dev / arandom se ele estiver disponível. No PHP 5.3.0 esta directiva é deixado esvaziar por padrão. Manual do PHP
Se você quiser saber como PHP gera um ID de sessão por meio de cheque padrão o código-fonte em Github . Certamente não é aleatória e é baseada em um hash (padrão: md5) destes ingredientes (ver linha 310 de trecho de código):
- Endereço IP do cliente
- Horário atual
- PHP Linear congruência Generator - um gerador pseudo número aleatório (PRNG)
- fonte aleatória específicos do OS - se o sistema operacional tem uma fonte aleatório disponível (por exemplo / dev / urandom)
Se o OS tem uma fonte aleatória força então disponível do ID gerado para o propósito de ser um ID de sessão é elevada ( / dev / urandom e outras OS fontes aleatórias são (geralmente) PRNGs criptograficamente seguras ). Se, no entanto isso não acontecer, então é satisfatório.
O objetivo com a geração de identificação sessão é:
- minimizar a probabilidade de gerar dois IDs de sessão com o mesmo valor
- torná-lo muito desafiador computacionalmente para gerar chaves aleatórias e bater um no uso de um .
Isto é conseguido pela abordagem do PHP para geração sessão.
Você não pode absolutamente garantir a unicidade , mas as probabilidades são tão baixos de bater o mesmo hash duas vezes que é, em geral, não vale cerca de preocupante.
Você pode instalar uma função alternativa de geração de hash se você quiser personalizar a forma como o ID é gerado (é um número de 128 bits gerada via MD5 por padrão). Consulte http://www.php.net/ / en / session.configuration.php # ini.session.hash-função manual
Para mais informações sobre sessões PHP, tente este excelente artigo http://shiflett.org / artigos / a-verdade-sobre-sessões que também links para outros artigos sobre fixação de sessão e sequestro.
Tamanho da session_id
Assume-se que seesion_id é uniformemente distribuído e tem size = 128 bits. Suponha que cada pessoa no planeta efetua login uma vez por dia com uma persistente uma nova sessão para 1000 anos.
num_sesion_ids = 1000*365.25 *7*10**9 < 2**36
collission_prob < 1 - (1-1/2**82)**(2**36) ≈ 1 - e**-(1/2**46)
≈ 1/2**46
Assim, a probabilidade de um ou mais colisão é menos de uma em 70 mil milhões. Daí a um 128-bit tamanho da session_id deve ser grande o suficiente. Como mencionado em outros comentários, o session_manager também pode verificar que o novo session_id ainda não existir.
aleatoriedade
Portanto, a grande questão que eu acho que é se o session_id: s são gerados com boa aleatoriedade pseudo. Por que você nunca pode ter certeza, mas eu recomendo o uso de uma solução padrão bem conhecido e frequentemente utilizado para este fim (como você provavelmente já o fazem).
Mesmo que as colisões são evitadas devido à verificação, aleatoriedade e tamanho de session_id é importante, para que hackers não podem, de alguma forma fazer adivinhação qualificado e encontrar session_id ativo:. S, com grande probabilidade
Eu não encontrei uma confirmação sobre isso, mas eu acredito PHP verifica se um ID de sessão já existe antes de criar um com que id.
A questão sessão hijacking pessoas estão preocupadas com é quando alguém descobre o id de sessão de um usuário ativo. Isto pode ser evitado em muitos aspectos, para mais informações sobre isso você pode ver desta página em php.net e este papel na sessão de fixação
Não, ID de sessão não é um GUID, mas dois usuários não devem ter o mesmo ID de sessão como eles são armazenados no lado do servidor.
<?php
session_start();
$_SESSION['username']="username";
?>
<!DOCTYPE html>
<html>
<head>
<title>Update</title>
</head>
<body>
<table border="2">
<tr>
<th>Username</th>
<th>Email</th>
<th>Edit</th>
</tr>
<?php
$conn=mysqli_connect("localhost","root","","telephasic");
$q2="select * from register where username = '".$_SESSION['username']."'";
$run=mysqli_query($conn, $q2);
while($row=mysqli_fetch_array($run))
{
$name=$row[1];
$email=$row[2];
?>
<tr>
<td><?php echo $name; ?></td>
<td><?php echo $email; ?></td>
<td><a href="edit.php"> Edit </a></td>
</tr>
<?php } ?>
</table>
</body>
Se o seu nome de usuário é diferente ou único que você pode usar este código para a sessão