nuno_couto Posted July 31, 2006 at 06:40 PM Report #41382 Posted July 31, 2006 at 06:40 PM 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. portalmundial.net »» criamos sites
karva Posted July 31, 2006 at 09:55 PM Report #41411 Posted July 31, 2006 at 09:55 PM e so pores if (!isset($_SESSION[login])) { header("Location: 'a tua localizacao'.php"); Proud LEIC-A@IST student!
nuno_couto Posted August 1, 2006 at 06:07 PM Author Report #41551 Posted August 1, 2006 at 06:07 PM 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. portalmundial.net »» criamos sites
kingless Posted August 1, 2006 at 06:30 PM Report #41552 Posted August 1, 2006 at 06:30 PM 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.
nuno_couto Posted August 1, 2006 at 11:43 PM Author Report #41609 Posted August 1, 2006 at 11:43 PM 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? portalmundial.net »» criamos sites
kingless Posted August 2, 2006 at 12:02 AM Report #41612 Posted August 2, 2006 at 12:02 AM 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 ?
Guest id194 Posted August 2, 2006 at 12:19 AM Report #41615 Posted August 2, 2006 at 12:19 AM da maneira que ele está a programar não vai ter a mesma falha que tinha o meu script kingless?
nuno_couto Posted August 2, 2006 at 01:45 AM Author Report #41626 Posted August 2, 2006 at 01:45 AM 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? portalmundial.net »» criamos sites
kingless Posted August 2, 2006 at 02:05 AM Report #41628 Posted August 2, 2006 at 02:05 AM 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 ?
nuno_couto Posted August 2, 2006 at 02:14 AM Author Report #41630 Posted August 2, 2006 at 02:14 AM 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). portalmundial.net »» criamos sites
kingless Posted August 2, 2006 at 02:20 AM Report #41632 Posted August 2, 2006 at 02:20 AM 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.
nuno_couto Posted August 2, 2006 at 02:36 AM Author Report #41633 Posted August 2, 2006 at 02:36 AM 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? portalmundial.net »» criamos sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now