5. state · desain slide ini dadaptasi dari university of san fransisco 5. state pti15010...

23
Desain slide ini dadaptasi dari University of San Fransisco 5. State PTI15010 Pemrograman Web Agi Putra Kharisma, S.T., M.T. Genap 2014/2015

Upload: truongkhue

Post on 31-Mar-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

Desain slide ini dadaptasi dari University of San Fransisco

5. State

PTI15010

Pemrograman Web

Agi Putra Kharisma, S.T., M.T.

Genap 2014/2015

State commonly refers to either the condition of a system or entity

Interaksi Client-Server Pada HTTP

(Sumber: Tim Downey – Guide To Web Development With Java)

Application state Resource state

Application State vs Resource State

Clients handle application state, servers resource state

Application state is information about where you are in the

interaction. It is used during your session with an application.

Resource state is the kind of (semi-)permanent data a

server stores, and lasts beyond the duration of a single

session of interactions.

http://ruben.verborgh.org/blog/2012/08/24/rest-wheres-my-state/

Stateless?

?

Stateless vs Stateful

Client-server system is stateless if: Client is independently responsible for its actions, server doesn’t track set of clients or ensure that cached data stays up to date Client-server system is stateful if: Server tracks its clients, takes actions to keep their cached states “current”. Client can trust its cached data.

HTTP 1.1 = Stateless

• Salah satu sifat protokol HTTP 1.1 adalah stateless

• Pada interaksi yang bersifat stateless, maka antara suatu

interaksi request-response dengan request-response

lainnya bersifat independen, tidak memiliki keterkaitan satu

sama lain.

• Server HTTP tidak mengingat apa yang terjadi pada

interaksi request-response yang telah terjadi.

• Pada interaksi stateless, server HTTP tidak menyimpan

state yang berhubungan dengan klien.

Mengapa stateless?

Statelessness eliminates the need

to remember.

The server should not remember the state of the application.

As a consequence, the client should send all information

necessary for execution along with each request, because the

server cannot reuse information from previous requests as it

didn’t memorize them.

http://ruben.verborgh.org/blog/2012/08/24/rest-wheres-my-state/

Keunggulan Statelessness

Visibility

Every request contains all context necessary to understand it.

Therefore, looking at a single request is sufficient to visualize

the interaction.

Reliability

Since a request stands on its own, failure of one request does

not influence others.

Scalability

The server does not have to remember the application state,

enabling it to serve more requests in a shorter amount of time.

http://ruben.verborgh.org/blog/2012/08/24/rest-wheres-my-state/

Faktanya, tidak sedikit aplikasi berbasis web yang membutuhkan interaksi stateful (terdapat

pasangan request/response yang tidak independen).

Telah dibahas bahwa HTTP 1.1 bersifat stateless, maka:

• Bagaimana server bisa mengingat bahwa pengguna telah login?

• Bagaimana server bisa mengingat barang-barang yang

dimasukkan pengguna ke dalam keranjang belanja (shopping

cart)?

• dsb

Beberapa Teknik Mengelola State

Terdapat banyak teknik/cara yang dapat digunakan untuk

mengelola state. Dalam perkuliahan ini hanya membahas 2

cara, yaitu:

1. Cookie

2. Session

Cookie (1/3)

• Cookie adalah file kecil yang diletakkan oleh server pada

komputer pengguna.

• Cookie dikirim setiap kali pengguna mengakses web yang

menjadi pemilik cookie tersebut. Sehingga, ukuran cookie

perlu diperhatikan supaya tidak membebani jaringan secara

berlebihan.

• Ketika kita mendefinisikan suatu cookie, maka kita

menentukan berapa lama cookie tersebut valid. Jika telah

melampaui waktu valid (expires), maka cookie tersebut

akan dihapus.

Cookie (3/3)

Keamanan Cookie (1/2)

• Apakah cookie berbahaya? Pada dasarnya tidak.

• Namun, cookie dapat digunakan untuk menyimpan

informasi tentang pengguna tanpa disadari oleh pengguna

tersebut. (Dengan kata lain, cookie dapat digunakan

sebagai media untuk memata-matai aktivitas pengguna,

misalnya seberapa sering pengguna mengakses, kapan

waktu aksesnya, link apa saja yang di-klik, dsb.)

• Untuk alasan tertentu, kita dapat mengaktifkan atau me-

non-aktifkan penggunaan cookie pada web browser yang

kita gunakan.

Keamanan Cookie (2/2)

• Jika cookie ‘terpaksa’ digunakan untuk menyimpan data

yang bersifat personal (misal: alamat email, nomor telepon,

dsb), gunakan enkripsi untuk melindungi data tersebut dari

pihak yang tidak berwenang.

PHP: Penanganan Cookie

Cookie ditangani dengan superglobal array $_COOKIE

Sets cookies: setcookie(name, [value], [expire], [path], [domain]); <?php setcookie("user", “Si Bolang", time()+3600); ?>

Retrieves cookies: $_COOKIE["name of cookie"]; <?php if(isset($_COOKIE["user"])) echo $_COOKIE["user"]; ?>

Session (1/3)

• Session merupakan kombinasi dari client-side session ID +

server-side session data

• Client-side session ID dapat berupa parameter URL,

cookie, atau HTTP request header.

• Cara yang paling umum adalah menggunakan cookie untuk

menyimpan client-side session ID.

• Server-side session data dapat disimpan pada file maupun

basis data.

Session (2/3)

• Session dapat digunakan untuk menyimpan data berukuran

sangat besar, sedangkan cookie hanya dapat menyimpan

data berukuran kecil (karena dibatasi oleh web browser).

• Data yang tersimpan pada session sifatnya sementara.

Data tersebut akan dihapus dari server dalam kondisi

tertentu, misalnya pengguna menutup web browser atau

session tersebut telah kadaluwarsa.

Se

ss

ion

(3

/3)

PHP: Penanganan Session (1/2)

•Memulai session <?php session_start(); ?>

•Memberi nilai pada variabel session <?php

session_start();

$_SESSION['status'] = 1; ?>

•Membaca nilai dari variabel session <?php session_start(); echo “Status=“ . $_SESSION[‘status']; ?>

PHP: Penanganan Session (2/2)

• Menghapus sebuah variabel session

<?php

session_start();

if(isset($_SESSION['status'])) unset($_SESSION['status']); ?>

• Menghapus semua session pada pengguna tertentu

<?php session_destroy(); ?>