Quão único é o id de sessão php? Tenho a impressão de várias coisas que li que não devo confiar que dois usuários nunca obtenham o mesmo ID de sessão. Não é um GUID?
Respostas:
Session_id pode realmente ser duplicado, mas a probabilidade é muito baixa. Se você tem um site com um tráfego razoável, isso pode acontecer uma vez na vida do seu site e irá incomodar apenas um usuário por uma sessão.
Não vale a pena se preocupar com isso, a menos que você pretenda construir um site de tráfego muito alto ou um serviço para o setor bancário.
Não é muito original quando enviado. 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ê estiver preocupado, deve configurá-lo para extrair alguma entropia de / dev / urandom, assim
ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");
procure por "php_session_create_id" no código do algoritmo real que eles estão usando.
Editado para adicionar: há um gerador de número aleatório DFA propagado pelo pid, misturado com o tempo em usecs. Não é uma condição de exclusividade firme, especialmente do ponto de vista da segurança . Use a configuração de entropia acima.
Atualizar:
A partir do PHP 5.4.0 session.entropy_file o padrão é / dev / urandom ou / dev / arandom se estiver disponível. No PHP 5.3.0, esta diretiva é deixada em branco por padrão. Manual PHP
Se você quiser saber como o PHP gera um ID de sessão por padrão, verifique o código-fonte no Github . Certamente não é aleatório e é baseado em um hash (padrão: md5) desses ingredientes (consulte a linha 310 do snippet de código):
Se o sistema operacional tiver uma fonte aleatória disponível, a força do ID gerado com o propósito de ser um ID de sessão é alta ( / dev / urandom e outras fontes aleatórias do sistema operacional são (geralmente) PRNGs criptograficamente seguros ). Se, no entanto, não o fizer, então é satisfatório.
O objetivo com a geração de identificação de sessão é:
Isso é alcançado pela abordagem do PHP para geração de sessão.
Você não pode garantir absolutamente a exclusividade , mas as probabilidades são tão baixas de acertar o mesmo hash duas vezes que, em geral, não vale a pena se preocupar.
Você pode instalar uma função de geração de hash alternativa se quiser personalizar a forma como o ID é gerado (é um número de 128 bits gerado via MD5 por padrão). Veja http://www.php.net/manual/en/session.configuration.php#ini.session.hash-function
Para obter mais informações sobre sessões de PHP, experimente este excelente artigo http://shiflett.org/articles/the-truth-about-sessions que também possui links para outros artigos sobre fixação de sessão e hijack.
Tamanho de session_id
Suponha que seeion_id seja uniformemente distribuído e tenha tamanho = 128 bits. Suponha que cada pessoa no planeta efetue login uma vez por dia com uma sessão persistente por 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
Portanto, a probabilidade de uma ou mais colisões é menor que uma em 70 mil bilhões. Portanto, o tamanho de 128 bits de session_id deve ser grande o suficiente. Conforme mencionado em outros comentários, o session_manager também pode verificar se o novo session_id ainda não existe.
Aleatoriedade
Portanto, a grande questão que penso é se os session_id: s são gerados com boa pseudo aleatoriedade. Você nunca pode ter certeza disso, mas eu recomendaria usar uma solução padrão bem conhecida e frequentemente usada para esse propósito (como você provavelmente já faz).
Mesmo que as colisões sejam evitadas devido à verificação, a aleatoriedade e o tamanho do session_id são importantes, para que os hackers não possam, de alguma forma, fazer uma suposição qualificada e encontrar session_id: s ativos com grande probabilidade.
Não encontrei uma confirmação sobre isso, mas acredito que o php verifica se já existe um id de sessão antes de criar um com esse id.
O problema de sequestro de sessão com o qual as pessoas estão preocupadas é quando alguém descobre a id de sessão de um usuário ativo. Isso pode ser evitado de várias maneiras, para mais informações você pode ver esta página em php.net e este artigo sobre fixação de sessão
Não, a id de sessão não é um GUID, mas dois usuários não devem obter a mesma id de sessão que estã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 for diferente ou único, você pode usar este código para a sessão