It would be better to implement SessionHandlerInterface. Your code is tightly coupled, move session_set_save_handler out from constructor to some bootstrap file. Also this class shouldn't create db connection, it is better to pass it as a constructor parameter:
$conn = new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8', DBUSER, DBPASS);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$handler = new MySessionHandler($conn);
session_set_save_handler($handler, true);
Constructor for the session handler:
class Session implements \SessionHandlerInterface
{
protected $conn;
public function __construct(\PDO $conn)
{
$this->conn = $conn;
}
// ....
}
This gives you more freedom, in case you decide to extend PDO you can pass it there. YouAlso you don't need to create separate connection for application and session. Implementing Interface ensures that you provide everything that you fulfill all requirements.
What I find odd is that you put every query to handler property, they should be local variables, you create them on every method call anyway.