• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

nuno_couto

session

12 mensagens neste tópico

Viva.

Criei um script de login com base na abertura de uma sessão.

Basicamente, o script cria a seguinte variavel após verificação do user / pass:

$_SESSION["id"]

(em que o id é o nº do user)

Nos restantes ficheiros o login é considerado se esta variável existir...

O que gostaria de saber é se é possível criar uma sessão que seja "única" para poder ter dois sites com o mesmo sistema de login, no mesmo alojamento, em pastas diferentes, porque desta forma, ao fazer login num deles, automaticamente estou a fazer no outro.

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e so pores

if (!isset($_SESSION[login])) {
     header("Location: 'a tua localizacao'.php");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi como isso ajuda... Não sei se me fiz explicar.

Vamos imaginar que tenho dois sites distintos. dominio.com/a e dominio.com/b

Ambos têm um sistema de login e "passam valores" entre as diferentes páginas através da sessão. Estão no mesmo alojamento em pastas diferentes.

Ou seja, fazendo login no site dominio.com/a/login.php  acontece o seguinte:

session_start();

$_SESSION["id"]=20;

Se eu entrar na outra pasta » dominio.com/b/mostrar_id.php (com o seguinte conteudo):

session_start();

$id=_SESSION["id"];

echo"$id";

O que vai acontecer é que ele vai buscar uma sessão aberta no outro site e mostra o valor 20...

Eu queria abrir sessões diferentes, para não haver misturas entre as sessões dos dois sites.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi como isso ajuda... Não sei se me fiz explicar.

Vamos imaginar que tenho dois sites distintos. dominio.com/a e dominio.com/b

Ambos têm um sistema de login e "passam valores" entre as diferentes páginas através da sessão. Estão no mesmo alojamento em pastas diferentes.

Ou seja, fazendo login no site dominio.com/a/login.php  acontece o seguinte:

session_start();

$_SESSION["id"]=20;

Se eu entrar na outra pasta » dominio.com/b/mostrar_id.php (com o seguinte conteudo):

session_start();

$id=_SESSION["id"];

echo"$id";

O que vai acontecer é que ele vai buscar uma sessão aberta no outro site e mostra o valor 20...

Eu queria abrir sessões diferentes, para não haver misturas entre as sessões dos dois sites.

Se no site > dominio.com/a/login.php  definiste a session assim

session_start();

$_SESSION["id"]=20;

na pasta > dominio.com/b/mostrar_id.php é só definir a session outra vez

session_start();

$_SESSION["id"] = 43;

ou então trocas $_SESSION["id"]  por $_SESSION["gid"]  ou $_SESSION["user_id"]  qualquer coisa não faz diferença.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mesmo assim não me fiz entender.

Vou explicar melhor. A ideia é ter dois sites com login (vamos supor, duas lojas online), no mesmo alojamento, em pastas diferentes, com o mesmo script.

Uma loja vende computadores, a outra vende perfumes.

Um utilizador que por acaso esteja com login efectuado na loja de perfumes, se introduzir o endereço da loja de computadores, vai ter o login feito, apesar da base de dados dos utilizadores ser diferente,  a sessão aberta na loja de perfumes vai ser reconhecida pela loja dos computadores.

Há alguma forma de isto não acontecer?

Andei a pesquisar o comando session_name() e não sei se será para estes casos. Alguem conhece?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mesmo assim não me fiz entender.

Vou explicar melhor. A ideia é ter dois sites com login (vamos supor, duas lojas online), no mesmo alojamento, em pastas diferentes, com o mesmo script.

Uma loja vende computadores, a outra vende perfumes.

Um utilizador que por acaso esteja com login efectuado na loja de perfumes, se introduzir o endereço da loja de computadores, vai ter o login feito, apesar da base de dados dos utilizadores ser diferente,  a sessão aberta na loja de perfumes vai ser reconhecida pela loja dos computadores.

Há alguma forma de isto não acontecer?

Andei a pesquisar o comando session_name() e não sei se será para estes casos. Alguem conhece?

Se isso acontece é porque o script não esta bem programado, e eu não sei como te ajudar neste caso se fosse eu a fazer o script já saberia como resolver.

Existe alguma relação entre a loja de perfumes e a loja de computadores ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

da maneira que ele está a programar não vai ter a mesma falha que tinha o meu script kingless?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Supostamente a loja de computadores e loja de perfumes são separadas mas o que acontece é que estão no mesmo alojamento, mas em pastas separadas.

Neste caso o problema são os logins, caso um user navegue em simultaneo nos dois sites.

Vou explicar o que eu fiz.

Um user introduz o user / pass... o que eu faço é ir a base de dados fazer o query. Se obtiver uma "row" em que o user é "x" e a pass é "y" então acontece o seguinte:

$_SESSION["login"] = "on";

Em caso contrário $_SESSION["login"] = "off";

O problema é que esta expressão é comum aos dois sites... Fazendo login num deles o user (se navegar simultaneamente) está a entrar tambem no outro.

O que estou a fazer mal?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

da maneira que ele está a programar não vai ter a mesma falha que tinha o meu script kingless?

Yep, quase a mesma coisa...

Supostamente a loja de computadores e loja de perfumes são separadas mas o que acontece é que estão no mesmo alojamento, mas em pastas separadas.

Neste caso o problema são os logins, caso um user navegue em simultaneo nos dois sites.

Vou explicar o que eu fiz.

Um user introduz o user / pass... o que eu faço é ir a base de dados fazer o query. Se obtiver uma "row" em que o user é "x" e a pass é "y" então acontece o seguinte:

$_SESSION["login"] = "on";

Em caso contrário $_SESSION["login"] = "off";

O problema é que esta expressão é comum aos dois sites... Fazendo login num deles o user (se navegar simultaneamente) está a entrar tambem no outro.

O que estou a fazer mal?

O id não pode ser um numero facil como por exemplo 1 ou 2 ou 3 tem que ser algo como c3b978658s545s0adedfbb461febc3b5bcba, e nunca faças isso $_SESSION["login"] = "on"; e $_SESSION["login"] = "off";  isso permiti ataques a conta de um certo usuario...

Acho que o problema é que a base de dados da loja X é a mesma que a a da loja Y,  ou então o problema esta no login... não sei...

A loja x e a loja y estão a utilizar a mesma base de dados e as mesmas tabelas ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não... As bases de dados são diferentes. Simplesmente caso seja detectada a variável "on" o login considera-se efectuado.

Depois existe outra variável que é o id (neste caso o id do utilizador) para que a base de dados possa ir buscar o nome do utilizador e apresentar a mensagem Benvindo X...

A única questão é que se o user 25 estiver com login no site dos computadores, vai conseguir estar online no site dos perfumes, igualmente como user com id=25 (mas não seria a mesma pessoa... o sistema iria buscar o nome do user 25 do outro site, numa BD diferente).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Buscar o usuario pelo id não é a melhor forma de se fazer isso... podemos considerar isso como uma falha de segurança. O problema esta na forma como programaste o script e nisso não te posso ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já descobri como resolver...

Baste que utilize o comando session_name antes de cada session_start

...

Resumindo... Se eu tenho duas pastas no mesmo alojamento e abro uma sessão fazendo:

session_start();

$_SESSION["var"]="a";

De seguida vou a um outro qualquer ficheiro e faço:

session_start();

$var=$_SESSION["var"];

echo "$var";

O resultado é "a".

Como resolver:

session_name("site_computadores");

session_start();

No outro site faço:

session_name("site_perfumes");

session_start();

Basta fazer isto sempre que se abrir sessão, e não há mistura entre as variáveis das diferentes sessões.

Kingless... Em relação à falha de segurança que referiste, vou colar o código e agradecia imenso que desses uma ajuda.

$result = mysql_query("SELECT nome, id FROM clientes WHERE user='$user' AND pass='$pass' ");

Basicamente o id é o número do cliente (gerado por auto-increment na base de dados, que é único, assim como o username).

Apartir deste ID abro uma variável na sessão e é isto que identifica o user enquanto ele navega.

Por exemplo, uma encomenda feita pelo user, é identificada como user "25" nome "Manuel José" (que foi buscar a base de dados no momento do login).

O que está mal aqui. Como farias para corrigir?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora