Pergunta

Este é um mecanismo de teste de aplicativo com 5 trabalhos definidas por mim..como 5 páginas php

Fluxo da aplicação

Login.html

check.php // para verificar se as credenciais de r para a direita

se correto, então

main.php //o usuário clica em "fazer o teste", em que esta página apresenta-lhe 1 dos 5 trabalhos...

mas uma vez que eu sou registrado no eu pode apenas mudar o url, para o url do teste de papel eu quero..os nomes de papel r 1.php 2.php....

como faço para parar isso...??

if(!isset($_SESSION['page'])//Tp
        continue;           //Tp
else
 {
   header('Location:login.php');
   exit;
 }                               //Tp
$_SESSION['page']=$_SERVER['SCRIPT_NAME'];//tp

isso está correto...como eu disse há 5 páginas....

no eac página eu tenho este código....

verificar se a variável de Sessão é definida....se ele estiver definido...isso significa que ele já visitou a página.....mas esse código não funciona...eu uso a variável _SESSION['page'] antes de declarar isso???

Foi útil?

Solução

Os problemas que você está tendo pode principalmente ser resolvidos pela organização de seu código em torno de um padrão de manipulador de script.(ver o meu orientações abaixo.)

Há duas maneiras básicas para passar informações para um script (como eu disse em um comentário acima).A forma básica é através de um GET variável, como http://www.example.com/main.php?p=1.

Se você deseja ter mais visitantes URLs amigáveis, você pode usar um RewriteRule em um .htaccess arquivo para converter o bom URLs para as URLs que seu processador vai entender.(Você vai precisar de o mod_rewrite habilitado.)

Isso pode ser um exagero para esta questão em particular, mas aqui estão algumas diretrizes para proteger aplicativos da web.Eu acho que eles são todos relevantes:

  1. Coloque suas informações confidenciais fora do público web raiz.
  2. Por padrão, não exibe qualquer informação.Só permitir a exibição de informações se o usuário está positivamente autorizado.
  3. Idealmente, isso inclui URLs (se eles digite uma URL válida, mas não são autorizados, não deixá-los saber que eles já atingiu um URL válido).É uma maneira de redirecionar (definir o cabeçalho de localização, como você estava fazendo) para a página de login, caso eles não estejam autorizados.
  4. Criar um manipulador padrão de script. Esta central script irá incluir todos os arquivos necessários e chamar todas as funções de que precisa.Passar todas as informações do pedido para este processador, e tem saída de todo o HTML.
  5. Requisito para #3: Encapsular o código funções e classes.Dessa forma, o manipulador padrão pode chamá-los quando estiver pronto, apenas se você precisar deles, e não simplesmente porque eles passou a ser incluído.Isso permite que você mais controle sobre o fluxo de seu aplicativo.
  6. Em vez de echoing HTML em lugares aleatórios em todo o seu código, retornar todos os formatos de saída para o processador principal, que irá coletar e saída de tudo em um só lugar quando ele está pronto.Aleatória echos espalhados ao redor tornar mais fácil para furos de segurança para cortar.
  7. Não confie a entrada do usuário.Se você estiver indo para usar um valor que você começa a partir $_GET ou $_POST, certifique-se de que é um valor válido antes de usá-lo.

Editar:

(Este é mais específico e direcionado para o seu código, como é agora)

3 motivos pelos quais o código não funciona conforme o esperado:

  1. Você deixou de fora um parêntese de fechamento na primeira linha if(!isset($_SESSION['page']).

  2. A forma como o código é escrito, se $_SESSION['page'] já está definido quando o usuário visita a página, ele será redirecionado para a página de login.Você pode corrigir isto, ao colocar o header('Location:login.php'); exit; no if cláusula e remover o else cláusula completamente:

    if(!isset($_SESSION['page'])) {
       header('Location:login.php');
       exit;
    }
    $_SESSION['page']=$_SERVER['SCRIPT_NAME'];
    
  3. Você precisa definir $_SESSION['page'] quando fizer o primeiro logon, então eles serão capazes de ver a primeira página.

Eu recomendo usar um número inteiro para $_SESSION['page'] em vez do nome do script.Dessa forma, você pode definir $_SESSION['page'] 1 quando iniciar sessão, e a cada vez que eles não conseguem visualizar uma página, incremento $_SESSION['page'] por um.Considere $_SESSION['page'] para dizer o próximo papel este usuário tem permissão para exibir.

Você pode definir um $pageid em cada papel.Cada vez que tenta exibir uma página, se $_SESSION['page'] é menos do que $pageid, não deixá-los ver a página.

Outras dicas

A melhor maneira é criar verdadeira autenticação e autorização em seu aplicativo. Em seguida, o URL que serve ao documento precisa verificar se o usuário pode visualizar a página antes de servir.

Tudo o que você estiver fazendo em check.php, faça -o na própria página de papel.

Muitas alternativas. Um casal:

  • Não codifique o nome dos nomes de papel no URL, mas retorne o conteúdo do papel selecionado de uma página chamada, digamos, teste paper.php.

  • Rastreie os papéis que o usuário tem o direito de ver na sessão do usuário. Verifique cada página do papel de teste se o usuário pode ver este e retornar um 403 proibido (ou uma página de erro), se não estiver.

Muito mais, tenho certeza.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top