HTML abrir duas paginas ? login e depois sistema ?

OIá a todos,

Estou com mais um probleminha no sistema que estou desenvolvendo, resumindo estou tentando inserir uma pagina HTML a mais para servir como login antes da pagina principal do sistema, porém usando o código abaixo que pega as duas paginas do cartão SD ele simplesmente abre as duas ao mesmo tempo uma sobre a outra não entendi e não consegui acessar a pagina de login encerrar a sessão e abrir a pagina do sistema, se usar as flag´s manualmente forçando para que entre na condição ele abre uma a uma normalmente, pesquisei muito sobre o (“Connection: keep-alive”); e (“Connection: close”); mas infelizmente sem sucesso, alguma dica ?

int flag = 0;

void setup (){
  ......}



void loop(){
  .....

    if (flag == 0)   {

    if (StrContains(HTTP_req, "GET /index")) {
      client.println("Content-Type: text/html");
      client.println("Connection: keep-alive");
      client.println();  
    }
    else {  // web page request
      // send rest of HTTP header
      client.println("Content-Type: text/html");
      client.println("Connection: keep-alive");
      //client.println("Connection: close");
      client.println();        
      // send web page
      webFile = SD.open("index.htm");        // open web page file
      if (webFile) {
        while(webFile.available()) {
          client.write(webFile.read()); // send web page to client
        }
        webFile.close(); 
        flag = 99;
      }
    }
  }


  if (flag ==99){

    if (StrContains(HTTP_req, "ajax_inputs")) {
      // send rest of HTTP header
      client.println("Content-Type: text/xml");
      client.println("Connection: keep-alive");
      client.println();
      SetLEDs();
      // send XML file containing input states
      XML_response(client);
    }
    else {  // web page request
      // send rest of HTTP header
      client.println("Content-Type: text/html");
      client.println("Connection: keep-alive");
      client.println();
      // send web page
      webFile = SD.open("acesso.htm");        // open web page file
      if (webFile) {
        while(webFile.available()) {
          client.write(webFile.read()); // send web page to client
        }
        webFile.close();
        flag = 0;
      }
    }   

  }  
  .
   .
 
}

Isso e o que o teu codigo esta a fazer... creio eu...

Se flag == 0, entao vai buscar a pagina.
Se a pagina existe, entao flag =99.

Se flag == 99, carrega outra pagina.

Tendo em conta o tamanho de memoria do Arduino, acredito que consigas reduzir o tamanho do programa se evitares a duplicacao disto:

      client.println("Content-Type: text/html");
      client.println("Connection: keep-alive");

Ok ja tentei retirar esta parte mas mesmo assim não da certo, vou deixar o site que usei como referencia

Como dito acima seu problema pode estar aqui:

       webFile.close(); 
        flag = 99;
      }
    }
  }


  if (flag ==99){

Você não pode mudar "flag" para 99 logo que a primeira página for carregada.

Você precisa mudar para 99 quando o login for feito com sucesso.

É realmente o problema esta ai, porém não achei uma forma de abrir a outra pagina no click do login e também de como encerrar a primeira tela de login, até tentei fazer uma tela de login embutida no arduino, porém ela fecha a sessão com o cliente e como o código se baseia na requisição de um cliente não deu certo, testei também um exemplo pronto WEB_Authentication mas ficou confuso de mesclar os códigos.

Experimentaste o que dissemos?

Ou seja, o Arduino envia o index.html com o formulario de login e ao fazer submit desse formulario, sera outro ficheiro que sera chamado e as variaveis de inicio de sessao testadas.
Ou seja… na primeira paigna que e servida (index.html) a variavel flag nao deve ser alterada…

Sim fiz da forma que falaram, porém o problema que percebi foi o client, ou seja quando recebe a primeira solicitação ele abre o sd card com o login.htm e fecha a sessão neste momento a flag=99; e tenta abrir o sd card , mas como não tem client solicitando ele não abre a pagina do sistema, fiz um outro teste com uma pagina enviando via post uma senha e ficou da mesma forma .

Enfim só abre sessão para o primeiro client e não consigo passar este client para ourta pagina.

Talvez eu esteja a ver mal as coisas... mas normalmente o teu codigo tera de ver qual e a pagina que esta a ser pedida pelo cliente antes de a ir buscar... Tu nao estas a fazer isso... estas a assumir que o cliente apenas vai ver duas paginas. O index e outra...

Nao sera melhor ideia veres qual e a pagina que esta a ser pedida?

Sim exatamente, porém não tenho ideia de como fazer isso ao ler a pagina do login e clicar em logar transferir o client para a pagina do sistema, no serial monitor acompanho o fluxo e na hora de acessar a outra pagina para na hora de "ver" o client ou seja, resolvi acessar login.htm depois de inserir a senha buscar a pagina acesso.htm, agora travei aqui kkk

Como e que chega o pedido do teu browser ao Arduino?? Nao sera nada de extraordinario encontrar o nome do ficheiro que indicas no teu index.html na string de pedido do browser… ou sera?

Então ele chega no arduino desta forma if (StrContains(HTTP_req, "GET /index")) { para a pagina de login e desta forma para pagina do sistema if (StrContains(HTTP_req, "jax_inputs")) {, se quiser e puder posso te enviar todo os códigos para analisar porque ta dificil mesmo de resolver. segue print´s do serial monitor

O problema esta logo ali...

tu fizeste o carregamento da pagina index e ja passaste para outra pagina... o que acontece quando carregas no botao de login?

Ao acessar o ip do arduino ele abre apenas a pagina do login e fica esperando a senha, ao clicar um login ele valida a senha e tenta carregar a pagina do sistema (acesso.htm) .

Ola, sou novo aqui no fórum estava procurando sobre isso, entretanto meu conhecimento em arduino ainda é muito limitado, gostaria de saber como vai o andamento desta Skeat, se tem alguma nova atualização para eu poder implementar e estuda-las. Obrigado.