5. State PTI15010 Pemrograman Web Agi Putra Kharisma, S.T., M.T. Genap 2014/2015 Desain slide ini dadaptasi dari University of San Fransisco State ? http://wmblanchardco.com/wp-content/uploads/2013/01/StateMap3.jpg State commonly refers to either the condition of a system or entity Interaksi Client-Server Pada HTTP Application state (Sumber: Tim Downey – Guide To Web Development With Java) 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/ 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. 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 (2/3) http://1.bp.blogspot.com/-z8y4KSfhhj0/T9SGemmK30I/AAAAAAAAAP4/fBFChYOINDc/s1600/http_cookie1.png 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 menon-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. Session (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(); ?>