diff --git a/session_example/session_example.info.yml b/session_example/session_example.info.yml
new file mode 100644
index 0000000..3086c0d
--- /dev/null
+++ b/session_example/session_example.info.yml
@@ -0,0 +1,8 @@
+name: 'Session example'
+type: module
+description: 'An example of how to use session in Drupal 8.'
+package: Example modules
+core: 8.x
+dependencies:
+  - examples
+
diff --git a/session_example/session_example.routing.yml b/session_example/session_example.routing.yml
new file mode 100644
index 0000000..4a4233b
--- /dev/null
+++ b/session_example/session_example.routing.yml
@@ -0,0 +1,16 @@
+session_example_form:
+  path: '/examples/session_example_form'
+  options:
+    _admin_route: TRUE
+  defaults:
+    _form: '\Drupal\session_example\Form\SessionExampleForm'
+  requirements:
+    _access: 'TRUE'
+session_example_path:
+  path: '/examples/session_example_path'
+  options:
+    _admin_route: TRUE
+  defaults:
+    _controller: '\Drupal\session_example\Controller\SessionExampleController::showSession'
+  requirements:
+    _access: 'TRUE'
diff --git a/session_example/src/Controller/SessionExampleController.php b/session_example/src/Controller/SessionExampleController.php
new file mode 100644
index 0000000..e79ddcf
--- /dev/null
+++ b/session_example/src/Controller/SessionExampleController.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\session_example\Controller\SessionExampleController.
+ */
+
+namespace Drupal\session_example\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Symfony\Component\HttpFoundation\Request;
+
+class SessionExampleController extends ControllerBase {
+
+  /**
+   * A session controller example.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   * @return string
+   *   A rendered array containing name and mail from session.
+   */
+  public function showSession(Request $request) {
+    $session = $request->getSession();
+		$name = $session->get('session_example.name', $this->t('No Name'));
+    $email = $session->get('session_example.email', $this->t('No EMail'));
+		return [
+      '#markup' => $this->t('Name: @name, EMail: @email', ['@name' => $name, '@email' => $email]),
+      '#cache' => [
+      'max-age' => 0,
+      ]
+		];
+  }
+}
diff --git a/session_example/src/Form/SessionExampleForm.php b/session_example/src/Form/SessionExampleForm.php
new file mode 100644
index 0000000..0458648
--- /dev/null
+++ b/session_example/src/Form/SessionExampleForm.php
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\session_example\Form\SessionExampleForm.
+ */
+
+namespace Drupal\session_example\Form;
+
+
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Utility\LinkGeneratorInterface;
+use Drupal\Core\Url;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\RequestStack;
+
+class SessionExampleForm extends FormBase {
+
+  /**
+   *  The request object.
+   *
+   * @var \Symfony\Component\HttpFoundation\RequestStack
+   */
+  protected $request;
+
+  /**
+   * The Link generator.
+   *
+   * @var \Drupal\Core\Utility\LinkGeneratorInterface
+   */
+  protected $link_generator;
+
+  /**
+   * Constructs a new SessionExampleForm object.
+   *
+   * @param \Symfony\Component\HttpFoundation\RequestStack
+   *   The request stack object.
+   * @param  \Drupal\Core\Utility\LinkGeneratorInterface
+   *   The link generator.
+   */
+  public function __construct(RequestStack $request, LinkGeneratorInterface $link_generator) {
+    $this->request = $request;
+    $this->link_generator = $link_generator;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('request_stack'),
+      $container->get('link_generator')
+    );
+  }
+
+  /**
+   * Get the session object from here.
+   *
+   * @return \Symfony\Component\HttpFoundation\Session\SessionInterface
+   */
+  public function getExampleSession() {
+    $request = $this->request->getCurrentRequest();
+    $session = $request->getSession();
+    return $session;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'session_example_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $session = $this->getExampleSession();
+    $form['name'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Name'),
+      '#default_value' => $session->get('session_example.name', 'My Name'),
+    ];
+    $form['email'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Email'),
+      '#default_value' => $session->get('session_example.email', 'My Email'),
+    ];
+    $form['save'] = [
+      '#type' => 'submit',
+      '#value' => $this->t('Save'),
+    ];
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $session = $this->getExampleSession();
+    $session->set('session_example.name', $form_state->getValue('name'));
+    $session->set('session_example.email', $form_state->getValue('email'));
+    $link = $this->link_generator->generate($this->t('Check here'), Url::fromRoute('session_example_path'));
+    drupal_set_message($this->t('The session has been saved successfully. @link', ['@link' => $link]));
+  }
+}
