[Powered by Google Translate] [Semana 9] [David J. Malan - Harvard University] [Esta é CS50. - CS50.TV] Tudo bem. Bem-vindo de volta. Este é CS50, e este é o início da semana 9. Hoje, em particular, o design, não mais no contexto de C mas no contexto do PHP e um pouco de SQL e um pouco de JavaScript, particularmente para um fim de ambos pset 7 e também o seu projeto final. Na verdade, se você está naquele ponto em seu projeto final onde presumivelmente a partir de uma hora atrás, você pelo menos começou a dar algum pensamento ao seu projeto final e você está pensando que você gostaria de colaborar com um ou dois colegas, se você está tendo problemas para se conectar com colegas de classe disse, sinta-se livre para preencher o formulário em cs50.net/partners/form. Ele só pede que você que você é, o tipo de projeto que você está pensando, onde você vive apenas por razões logísticas. E então, se você quer manter um olho em durante a próxima semana ou assim que a URL planilha lá, então você pode ver uma versão somente leitura do documento do Google em que estamos coletando essas informações. Então, se você quer trabalhar com alguém, por todos os meios se sentir livre para chegar às pessoas através deste mecanismo. Mas a maioria das pessoas fazem trabalho solo. Isso é totalmente bem. Portanto, não sinto que esta é de forma alguma obrigatório. Na sexta-feira era só eu e alguns da equipe aqui, teatro vazio para a maior parte. Foram três turistas sentado lá em cima, de modo que foi um pouco estranho. O que nós falamos foi sobre bases de dados e nós conversamos sobre pset 7 um pouco. E se você não aconteceu para pegar aquela em vídeo ainda, isso é bom. Vou tentar definir os termos que, de outra forma ter concedido com base em palestra de sexta-feira. Mas hoje nós estamos indo para tentar chegar ao ponto de não apenas ser capaz de fazer algo assim pset 7 mas realmente entender o que está acontecendo debaixo do capô, particularmente algumas das abstrações que nós colocamos no lugar do arquivo functions.php para fazer a sua vida um pouco mais fácil, mas para que você finalmente entender de modo que quando as rodinhas sair em algumas semanas você ainda pode sobreviver no mundo real e fazer essas coisas sem qualquer quadro CS50 debaixo de você. Esse $ _SESSION, para aqueles de vocês que estão familiarizados ou que já peguei o vídeo na sexta-feira, o que vamos fazer SESSÃO em uma aplicação web baseado em PHP? Esta é uma variável superglobal, o que significa que é similar em espírito para GET e POST e alguns outros, mas o que é essa coisa de útil para? O que é SESSÃO utilizado? Sim. [Aluno] log in Desculpe? [Aluno] log in log in fato. Em pset sete estamos usando essa superglobal SESSÃO para facilitar log in E o que é agradável sobre este superglobal é que é um array associativo. Uma matriz associativa, recall, é apenas uma matriz, mas cujos índices já não têm de ser números como 012. Eles podem ser números ou eles podem ser ainda cordas. E isso, se você mergulhou pset 7 ainda, você deve se lembrar que estamos armazenando uma identificação chave chamada dentro dessa matriz associativa cujo valor é algo como 123 - qualquer que seja conectado no momento ID do usuário é. A motivação para isso é que, mesmo depois de o usuário visitou localhost ou o meu site mais geral e então eles logado, mesmo que não clique em um link ou voltar para o meu site por 5 minutos ou até mesmo uma hora ou até mesmo um dia, mas eles deixam a janela do navegador aberta, através deste superglobal posso lembrar que eles se identificou Em outras palavras, isso me permite armazenar um pouco longo prazo qualquer coisa que eu quero sobre um usuário. E você pode pensar realmente como a encarnação de um carrinho de compras. Locais como a Amazon, obviamente, deixar você colocar as coisas em um carrinho de compras, mas HTTP, o protocolo que alimenta a Web, é apátrida no sentido de que quando você visita um site, para a maior parte, você não tem alguma conexão de rede constante entre o navegador eo servidor. Assim que você tenha baixado o HTML e os JPEGs e os GIFs e tudo isso, a conexão vai embora e você só tem uma cópia do HTML e outras coisas do servidor. Mas se o servidor quer se lembrar de algo sobre você, a carga está no servidor para realmente gravar essa informação. E assim que você o programador que têm controle sobre o servidor pode colocar mais alguma coisa que você quiser dentro dessa matriz associativa superglobal e ele vai estar lá na próxima vez que o usuário voltar, se é minutos ou mesmo dias mais tarde, a menos que eles fechem a janela do navegador, em que ponto SESSÃO desaparece. Então, é o armazenamento efêmero, é não-persistente, e é destinado a ir embora assim que o usuário fecha seu navegador - não apenas que guia, muitas vezes, o navegador inteiro, assim, efectivamente deslogar o usuário. Então, como é essa coisa realmente implementado? Vamos dar uma rápida olhada em um exemplo simples, olhou na sexta-feira. Para quem não conhece, era tão simples como isso. Esta é uma página da web, cujo único propósito na vida é me diga quantas vezes eu já visitaram esta página. Esta é a primeira vez aqui na segunda-feira que o visitei, por isso diz 0 vezes. Mas se eu começar a recarregar esta página, ele diz que uma vez, 2, 3, 4, 5, e isso acabará por apenas manter a contagem subindo, subindo, subindo, subindo, até para cada vez que eu realmente clicar em Atualizar sobre ele. Então, como é esse trabalho? Deixe-me ir para dentro desse arquivo chamado counter.php. A parte de cima é todos os comentários azuis, mas a parte interessante é aqui. Na linha 13 nós chamamos isso de session_start função, e que é, literalmente, tudo o que você precisa fazer se você quiser ter acesso a este superglobal especial chamada $ _SESSION. Isso torna tudo isso possível, e vamos ver em um momento como esse é possível. Em comunicado linha 16 o que eu estou fazendo. Se a chave, chamado contador - por outras palavras, o valor do índice - "contador" existe dentro dessa matriz chamada sessão, então o que estou fazendo com ele na linha abaixo? Qual é a linha 18 está fazendo? [Resposta do aluno inaudível] O que é isso? [Aluno] Armazenar o valor. Bom. É armazenar o valor que está em SESSÃO agora em uma nova variável local temporária, $ Contador em todas as letras minúsculas. Note que o PHP já está sendo um pouco preguiçoso aqui. Repare que não temos qualquer menção de int ou float ou string ou qualquer coisa assim porque o PHP é fracamente tipado, em que você não tem que especificar o tipo de uma variável, e neste caso aqui eu não tenho ainda declarou ainda. Estou declarando-a dentro destas chaves e ao contrário de C, este é realmente bem. Não importa o quão profundamente aninhados declaração de uma variável é em PHP - dentro de encaracolado cinta, dentro de encaracolado cinta e afins - ele naquele momento no tempo existem para o restante do programa, para melhor ou para pior. Por isso, imediatamente torna-se global, logo que você o define como estamos fazendo aqui. Caso contrário, se eu não achar que há alguma coisa na superglobal SESSION, Estou aparentemente inicializar este contador variável para 0, assim, apenas assumindo o usuário nunca tenha estado aqui antes. E então este curso é de incrementar o contador como? Estou atualizando o valor que está dentro dessa matriz associativa fixando-a igual a qualquer momento contador é + 1. Se eu rolar até aqui para o código HTML da página, é realmente muito simples. Tudo o que tenho no corpo desta página é: "Você já visitaram este site vezes assim e assim." E esta é uma construção PHP. Se você fizer