Share
Embed
Transcript
25 slides
-
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 -
–Wikipédia “É um modelo de arquitetura de software que separa
a representação da informação da interação do usuário com ele” MVC Model-View-Controller -
MVC Model-View-Controller Resultado da Hackathon por Participante PARTICIPANTES PONTUAÇÃO John
Doe 11 José Carlos 15 Huguinho da Mederi 9 Maria Joaquina 14 Raul Seixas Jr. 21 Exemplo -
MVC Model-View-Controller Exemplo Resultado da Hackathon por Participante 0 6
11 17 22 John Doe José Carlos Huguinho da Mederi Maria Joaquina Raul Seixas Jr. 21 14 9 15 11 -
MVC Model-View-Controller Exemplo Resultado da Hackathon por Participante 30% 20%
13% 21% 16% John Doe José Carlos Huguinho da Mederi Maria Joaquina Raul Seixas Jr. -
• Model (modelo) • Consiste nos dados da aplicação, regras
de negócios, lógica e funções; • View (Visão) • Pode ser qualquer saída de representação dos dados, como uma tabela ou um diagrama; • Controller (controlador) • Faz a mediação da entrada, convertendo-a em comandos para o modelo ou visão; MVC Model-View-Controller -
MVC + PHP Exemplo simples <? foreach ($fooList as $row):
?>! <?= $row['field1'] ?> - <?= $row['field1'] ?>! <? endforeach ?>! views/foo-list.php -
MVC + PHP Exemplo simples models/FooModel.php <?php! class Foo()! {!
! protected $db;! ! ! public function __construct(PDO $db)! ! {! ! ! $this->db = $db;! ! }! ! ! public functon getAllFoos() {! ! ! return $this->db->query('SELECT * FROM table');! ! }! }! -
MVC + PHP Exemplo simples <?php! ! $db = new
PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');! ! // Make your model available! include 'models/FooModel.php';! ! // Create an instance! $foo = new FooModel($db);! $fooList = $foo->getAllFoos();! ! // Show the view! include 'views/foo-list.php';! foo.php -
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. -
Front Controller Web Application Front Controller User Controller Job Controller
User Model User View Job Model Job View GET /index.php POST /index.php -
Referências • http://www.phptherightway.com/ • http://www.php.net/ • http://st-www.cs.illinois.edu/users/smarch/st-docs/ mvc.html (Artigo Original
sobre MVC) • http://pt.wikipedia.org/wiki/MVC • http://en.wikipedia.org/wiki/ Front_Controller_pattern#Examples