SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Curso PHP
@JonataWeber
2014
Databases & Sessions
PHP Sessions
• Como identificar um usuário na
internet?
• Sessōes trabalham com identificador
único (UID)
• Armazenamento temporário
PHP Sessions<?php!
!
// inicia um PHP Session!
session_start();!
!
// guarda uma informação na sessão!
$_SESSION['message'] = 'Hello, Session!';!
!
// recupera uma informação da sessão!
echo $_SESSION['message'];!
!
// remove parte da sessão !
unset($_SESSION['message']);!
!
// remove a sessão inteira !
session_destroy();!
Databases
• Necessidade de Persistir e
Recuperar dados por tempo
indeterminado
• Geralmente possui armazenamento
não-volátil
Drivers Nativos
• Uma API diferente para cada banco
de dados
• mysqli, pgsql, mssql, etc.
• Melhor opção até o PHP 5.1.0
MySQL Extension
• Será removida nas próximas versões
• Funções iniciadas com mysql_*
• mysql_connect, mysql_query, mysql_num_rows,
etc…
• Substituir por mysqli ou PDO
Depreciada no PHP 5.5.0
MySQLi Extension
http://php.net/mysqli
<?php!
// mysqli!
$mysqli = new mysqli("localhost", "root", "mysqlpwd",
“test");!
!
$result = $mysqli->query("SELECT 'Olá, usuário MySQL!'
AS _message FROM DUAL");!
!
$row = $result->fetch_assoc();!
!
echo $row['_message'];!
PDO Extension
http://www.php.net/pdo
<?php!
!
// PDO!
$pdo = new PDO('mysql:host=localhost;dbname=test',
'root', ‘mysqlpwd');!
!
$statement = $pdo->query("SELECT 'Olá, usuário MySQL!'
AS _message FROM DUAL");!
!
$row = $statement->fetch(PDO::FETCH_ASSOC);!
!
echo $row['_message'];!
PDO Extension
• Não irá traduzir suas consultas SQL
• Conexão com múltiplos banco de dados
usando a mesma API
• Mais importante: PDO evita ataques de
SQL Injections
• PDO Statements + Bind Parameters
SQL Injection
<?php!
!
$pdo = new PDO('sqlite:/path/db/users.db');!
$pdo->query("SELECT name FROM users WHERE id = ".$_GET['id']); // <-- NO!!
SELECT name FROM users WHERE id = 50!
http://yourdomain.com/users?id=50
Resultado:
SQL Injection
SELECT name FROM users WHERE id = 50;DELETE FROM users!
E se…
http://yourdomain.com/users?id=50%3BDELETE+FROM+users
Resultado:
<?php!
!
$pdo = new PDO('sqlite:/path/db/users.db');!
$pdo->query("SELECT name FROM users WHERE id = ".$_GET['id']); // <-- NO!!
SQL Injection
Como evitar?
<?php!
!
$pdo = new PDO('sqlite:/path/db/users.db');!
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');!
$stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT); // <--
Automatically sanitized by PDO!
$stmt->execute();!
Maiores informações:
https://www.owasp.org/index.php/SQL_Injection
Front Controller
• Padrão Arquitetural
• Bastante utilizado em Aplicações Web
• Responsável pelo Fluxo da Aplicação
• Evita duplicação de código
• Manipulação de Sessões, Caching, Filtro de
dados, Autenticação, etc.
Referências
• http://www.phptherightway.com/
• http://www.php.net/

Mais conteúdo relacionado

Semelhante a Curso PHP UNIFACS 2014.1 – Databases & Sessions

Sessões (in portuguese)
Sessões (in portuguese)Sessões (in portuguese)
Sessões (in portuguese)
Bruno Pedro
 
Aula 11 - Controle de sessão em PHP - Programação Web
Aula 11  - Controle de sessão em PHP - Programação WebAula 11  - Controle de sessão em PHP - Programação Web
Aula 11 - Controle de sessão em PHP - Programação Web
Dalton Martins
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
Regis Magalhães
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
Carlos Santos
 

Semelhante a Curso PHP UNIFACS 2014.1 – Databases & Sessions (20)

PHP MySQL Aula 08
PHP MySQL Aula 08PHP MySQL Aula 08
PHP MySQL Aula 08
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHP
 
Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutos
 
Aula 5
Aula 5Aula 5
Aula 5
 
Sessões (in portuguese)
Sessões (in portuguese)Sessões (in portuguese)
Sessões (in portuguese)
 
Aula 11 - Controle de sessão em PHP - Programação Web
Aula 11  - Controle de sessão em PHP - Programação WebAula 11  - Controle de sessão em PHP - Programação Web
Aula 11 - Controle de sessão em PHP - Programação Web
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Sessao
SessaoSessao
Sessao
 
Aula 5 - Cookies e sessões em PHP
Aula 5 - Cookies e sessões em PHPAula 5 - Cookies e sessões em PHP
Aula 5 - Cookies e sessões em PHP
 
Aula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHPAula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHP
 
Sistemas operacionais aula 01
Sistemas operacionais   aula 01Sistemas operacionais   aula 01
Sistemas operacionais aula 01
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Aula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHPAula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHP
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdf
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
 
Integração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceIntegração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open source
 
Estruturas de Sistemas Operacionais
Estruturas de Sistemas OperacionaisEstruturas de Sistemas Operacionais
Estruturas de Sistemas Operacionais
 

Mais de Jonata Weber (9)

Programando sua carreira
Programando sua carreiraProgramando sua carreira
Programando sua carreira
 
Curso PHP UNIFACS 2014.1 – Frameworks
Curso PHP UNIFACS 2014.1 – FrameworksCurso PHP UNIFACS 2014.1 – Frameworks
Curso PHP UNIFACS 2014.1 – Frameworks
 
Curso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aulaCurso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aula
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a Aula
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações Web
 
PHP Orientado a Objetos - 1a Parte
PHP Orientado a Objetos - 1a PartePHP Orientado a Objetos - 1a Parte
PHP Orientado a Objetos - 1a Parte
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHP
 
Curso PHP - 2a. Aula (2013.2)
Curso PHP - 2a. Aula (2013.2)Curso PHP - 2a. Aula (2013.2)
Curso PHP - 2a. Aula (2013.2)
 
Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)Curso PHP - 1a. Aula (2013.2)
Curso PHP - 1a. Aula (2013.2)
 

Curso PHP UNIFACS 2014.1 – Databases & Sessions

  • 2. PHP Sessions • Como identificar um usuário na internet? • Sessōes trabalham com identificador único (UID) • Armazenamento temporário
  • 3. PHP Sessions<?php! ! // inicia um PHP Session! session_start();! ! // guarda uma informação na sessão! $_SESSION['message'] = 'Hello, Session!';! ! // recupera uma informação da sessão! echo $_SESSION['message'];! ! // remove parte da sessão ! unset($_SESSION['message']);! ! // remove a sessão inteira ! session_destroy();!
  • 4. Databases • Necessidade de Persistir e Recuperar dados por tempo indeterminado • Geralmente possui armazenamento não-volátil
  • 5. Drivers Nativos • Uma API diferente para cada banco de dados • mysqli, pgsql, mssql, etc. • Melhor opção até o PHP 5.1.0
  • 6. MySQL Extension • Será removida nas próximas versões • Funções iniciadas com mysql_* • mysql_connect, mysql_query, mysql_num_rows, etc… • Substituir por mysqli ou PDO Depreciada no PHP 5.5.0
  • 7. MySQLi Extension http://php.net/mysqli <?php! // mysqli! $mysqli = new mysqli("localhost", "root", "mysqlpwd", “test");! ! $result = $mysqli->query("SELECT 'Olá, usuário MySQL!' AS _message FROM DUAL");! ! $row = $result->fetch_assoc();! ! echo $row['_message'];!
  • 8. PDO Extension http://www.php.net/pdo <?php! ! // PDO! $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', ‘mysqlpwd');! ! $statement = $pdo->query("SELECT 'Olá, usuário MySQL!' AS _message FROM DUAL");! ! $row = $statement->fetch(PDO::FETCH_ASSOC);! ! echo $row['_message'];!
  • 9. PDO Extension • Não irá traduzir suas consultas SQL • Conexão com múltiplos banco de dados usando a mesma API • Mais importante: PDO evita ataques de SQL Injections • PDO Statements + Bind Parameters
  • 10. SQL Injection <?php! ! $pdo = new PDO('sqlite:/path/db/users.db');! $pdo->query("SELECT name FROM users WHERE id = ".$_GET['id']); // <-- NO!! SELECT name FROM users WHERE id = 50! http://yourdomain.com/users?id=50 Resultado:
  • 11. SQL Injection SELECT name FROM users WHERE id = 50;DELETE FROM users! E se… http://yourdomain.com/users?id=50%3BDELETE+FROM+users Resultado: <?php! ! $pdo = new PDO('sqlite:/path/db/users.db');! $pdo->query("SELECT name FROM users WHERE id = ".$_GET['id']); // <-- NO!!
  • 12. SQL Injection Como evitar? <?php! ! $pdo = new PDO('sqlite:/path/db/users.db');! $stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');! $stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT); // <-- Automatically sanitized by PDO! $stmt->execute();! Maiores informações: https://www.owasp.org/index.php/SQL_Injection
  • 13. Front Controller • Padrão Arquitetural • Bastante utilizado em Aplicações Web • Responsável pelo Fluxo da Aplicação • Evita duplicação de código • Manipulação de Sessões, Caching, Filtro de dados, Autenticação, etc.