curso php unifacs 2014.1 – databases & sessions

14
Curso PHP @JonataWeber 2014 Databases & Sessions

Upload: becker-professional-education

Post on 04-Jul-2015

332 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Curso PHP UNIFACS 2014.1 – Databases & Sessions

Curso PHP

@JonataWeber2014

Databases & Sessions

Page 2: Curso PHP UNIFACS 2014.1 – Databases & Sessions

PHP Sessions

• Como identificar um usuário na internet?

• Sessōes trabalham com identificador único (UID)

• Armazenamento temporário

Page 3: Curso PHP UNIFACS 2014.1 – Databases & Sessions

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();!

Page 4: Curso PHP UNIFACS 2014.1 – Databases & Sessions

Databases• Necessidade de Persistir e

Recuperar dados por tempo indeterminado

• Geralmente possui armazenamento não-volátil

Page 5: Curso PHP UNIFACS 2014.1 – Databases & Sessions

Drivers Nativos

• Uma API diferente para cada banco de dados

• mysqli, pgsql, mssql, etc.

• Melhor opção até o PHP 5.1.0

Page 6: Curso PHP UNIFACS 2014.1 – Databases & Sessions

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

Page 7: Curso PHP UNIFACS 2014.1 – Databases & Sessions

MySQLi Extensionhttp://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'];!

Page 8: Curso PHP UNIFACS 2014.1 – Databases & Sessions

PDO Extensionhttp://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'];!

Page 9: Curso PHP UNIFACS 2014.1 – Databases & Sessions

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

Page 10: Curso PHP UNIFACS 2014.1 – Databases & Sessions

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:

Page 11: Curso PHP UNIFACS 2014.1 – Databases & Sessions

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!!

Page 12: Curso PHP UNIFACS 2014.1 – Databases & Sessions

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

Page 13: Curso PHP UNIFACS 2014.1 – Databases & Sessions

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.

Page 14: Curso PHP UNIFACS 2014.1 – Databases & Sessions

Referências

• http://www.phptherightway.com/

• http://www.php.net/